C#float.Parse失去精度

时间:2017-06-02 18:17:20

标签: c# floating-point type-conversion precision

我在将数据库中的数据转换为浮点数时遇到了一些麻烦。基本上,应用程序将我的一个值四舍五入到一个小数。该表包含一组带有货币值的字段,其中一个值应用程序保持四舍五入。最奇怪的是,尽管我的数据库中有更多浮点值,但只有其中一个是舍入的(valorAtualizadoAcordo)。所以,这是我的问题:

SELECT 
    idAcordo,
    tipoAcordo,
    valorAtualizadoAcordo,
    dataAtualizacaoAcordo,
    valorConfessadoAcordo,
    valorAcordo,
    valorEntradaAcordo,
    valorParceladoAcordo,
    quantidadeParcelasAcordo,
    taxaAcordo,
    atualizacaoTrAcordo,
    dataPrimeiraParcelaAcordo,
    dataUltimaParcelaAcordo,
    dataAssinaturaAcordo,
    dataAprovacaoAcordo,
    primeiraDataAbertoAcordo,
    dataProtocoloAcordo,
    tipoProtocoloAcordo,
    cadastroDspsAcordo,
    dataSolicitacaoAcordo,
    contabilizadoAcordo,
    dataLancamentoAcordo,
    contratoDevolvidoAcordo,
    dataDevolucaoAcordo,
    volumetriaAcordo,
    pagamentoRealizadoDataAcordo,
    contratoAntesAjuizamentoDataAcordo 
FROM 
    acordo 
WHERE 
    FK_idContrato = 46;

这是我的转换:

ac.setValor(float.Parse(acd.Rows[i][5].ToString(), CultureInfo.InvariantCulture));

我试图从数据库中检索的值是325,360.69。我将它转换为PT-BR格式,是什么给了我“325360,7”(在巴西,我们使用“,”代替“。”来定义十进制浮点数。)

1 个答案:

答案 0 :(得分:0)

不确定为什么你认为从一个浮点数和一个浮点数做一个字符串是一个好主意,但我会先放弃ToString。使用强制转换或真实转换方法,如convert.ToFloat

float f = (float)acd.Rows[i][5];

或者:

float f = Convert.ToFloat(acd.Rows[i][5]);