Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#float。解析精度下降_C#_Floating Point_Type Conversion_Precision - Fatal编程技术网

C#float。解析精度下降

C#float。解析精度下降,c#,floating-point,type-conversion,precision,C#,Floating Point,Type Conversion,Precision,我在将数据库中的数据转换为浮点数时遇到了一些问题。基本上,应用程序将我的一个值四舍五入到一个小数位。该表包含一组具有货币值的字段,其中一个值由应用程序四舍五入。最奇怪的是,尽管我的数据库中有更多的浮点值,但其中只有一个是四舍五入的(valoratalizadoacordo)。这是我的问题: SELECT idAcordo, tipoAcordo, valorAtualizadoAcordo, dataAtualizacaoAcordo, valorCon

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

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));

我试图从数据库中检索的值是325360.69。我正在将其转换为PT-BR格式,这给了我“325360,7”(在巴西,我们使用“,”而不是“.”来定义十进制浮点)。

不确定为什么您认为从浮点和背面生成字符串是一个好主意,但我首先要删除
ToString
。使用强制转换或实际转换方法,如
convert.ToFloat

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


float大约有7位精度。您需要改用double。从上的文档中可以看出:单个值的精度最多为7位小数,但内部最多保留9位小数。这意味着某些浮点操作可能缺少更改浮点值的精度。我建议您使用float.TryParse,以便检查数据库的值是否适合浮点容量。相反,您必须使用double。这似乎是创建
十进制
的原因?如果您使用的是“货币值”,您应该使用base-10
十进制
而不是base-2
浮点
s。当我尝试这样做时,第一次还是第二次出现错误:“InvalidCastException未处理”?第二个应该更安全(当它失败时,它的价值是什么?)。另外,实际类型可能是
decimal
,这是一种更好的货币值数据类型。@PatrickPierre您解决了这个问题吗?需要更多的帮助吗?是的,我需要。我用十进制代替浮点数,效果很好。
float f = Convert.ToFloat(acd.Rows[i][5]);