ToDouble返回错误的数字

时间:2016-06-14 19:23:18

标签: c# double

我有一个字符串"999999999999.999"。我想将其转换为double。我尝试了很多东西,但它总是给我错误的数字。

我试过了:

Math.Truncate(Convert.ToDouble("999999999999.999") * 1000) / 1000;

它返回给我:99999999999.99902

只有Convert.ToDouble("999999999999.999")给我的回报一样。

02部分是错误的部分。

如何在不损失精度或准确度的情况下将字符串"999999999999.999"转换为double

3 个答案:

答案 0 :(得分:3)

如果您想要精确的精度将其转换为十进制

转换为double时会出现精度损失

答案 1 :(得分:0)

如果附加信息表明小数点前不超过12位且后面有3位数,则double应足够精确,以区分所有可存储的数字。

例如,最大数字由999999999999.9990234375表示,它接近999999999999.999而不是任何其他三位小数。

您需要控制格式,以便舍入到最接近的3位小数。

如果进行任何计算,则应转换为十进制,四舍五入到小数点后3位,以避免累积舍入误差。

答案 2 :(得分:-1)

尝试:

double aux = double.Parse("999999999999.999") * 1000 / 1000;
double result = Math.Round(aux, 3);