C#Convert.ToDouble()在将字符串转换为double时丢失小数点

Gio*_*zas 8 c# double

假设我们有以下简单代码

        string number = "93389.429999999993";
        double numberAsDouble = Convert.ToDouble(number);
        Console.WriteLine(numberAsDouble);
Run Code Online (Sandbox Code Playgroud)

之后,转换numberAsDouble变量的值为93389.43.我该怎么做才能使这个变量保持完整的数字而不是四舍五入呢?我发现它的Convert.ToDecimal行为方式不同,但我需要将值设为double.

-------------------小更新---------------------

在上面代码的第2行中放置一个断点,表明numberAsDouble变量在控制台中显示之前具有舍入值93389.43.

D S*_*ley 11

93389.429999999993不能表示恰好为一个64位浮点数.A double只能容纳15或16位数字,而你有17位数字.如果您需要这种精确度,请使用decimal.

(我知道你说你需要它作为双倍,但如果你能解释原因,可能有其他解决方案)


Dan*_*rth 6

这是预期的行为.

双精度不能完全代表每个数字.这与字符串转换无关.

你可以自己检查一下:

Console.WriteLine(93389.429999999993);
Run Code Online (Sandbox Code Playgroud)

这将打印93389.43.

以下还说明了这一点:

Console.WriteLine(93389.429999999993 == 93389.43);
Run Code Online (Sandbox Code Playgroud)

这打印True.