【发布时间】:2017-11-04 05:36:00
【问题描述】:
我在将数据库中获取的数据转换为浮点数时遇到了一些麻烦。基本上,该应用程序将我的一个值四舍五入到小数点后一位。该表包含一组具有货币值的字段,其中一个值由应用程序进行四舍五入。最奇怪的是,尽管我的数据库中有更多浮点值,但其中只有一个是四舍五入的(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”(在巴西,我们使用“,”而不是“.”来定义十进制浮点数)。
【问题讨论】:
-
float 的精度大约为 7 位。您需要使用 double 代替。
-
来自
Single上的文档:单个值具有最多 7 位十进制数字的精度,但内部最多保留 9 位数字。这意味着某些浮点运算可能缺乏更改浮点值的精度。 -
我推荐你使用float.TryParse,这样你可以检查数据库的值是否适合浮点容量。相反,你必须使用 double。
-
这似乎是为
decimal创造的那种情况? -
如果您使用“货币价值”,您应该使用 base-10
decimal而不是 base-2floats。
标签: c# floating-point type-conversion precision