C# Double.ToString() 错误结果
C# Double.ToString() wrong result
我正在尝试使用 ToString() 方法显示双精度值。
该值为 1.000000000000113。
, 使用 Double.ToString("F16") 结果 1.0000000000001100
, 使用 Double.ToString("F17") 结果 1.000000000000011000
我试过了
Double.ToString("0.0000000000000000") 结果 1.0000000000001100
似乎 ToString() 将第 14 个数字以上的所有小数设置为零。
我正在使用 .Net 4.5.2。
我怎么解决这个问题。
A float
和 double
浮点数 (IEEE 754) 在 Sign, Mantissa 和 Exponent in base 2,恰好数字 1.000000000000113
不适合 base 2 数。
但是,我们确实有 do 在 base 10 (decimal
) 上工作的浮点类型,它有更多有理数的精度,但没有数值范围
float
近似范围(±1.5 x 10^−45
到 ±3.4 x 1038
)
double
近似范围(±5.0 × 10^−324
到 ±1.7 × 10308
)
decimal
近似范围(±1.0 x 10^-28
到 ±7.9228 x 1028
)
样本
double val = 1.000000000000113;
Console.WriteLine(val);
decimal val2 = 1.000000000000113m;
Console.WriteLine(val2);
输出
1.00000000000011
1.000000000000113
我正在尝试使用 ToString() 方法显示双精度值。 该值为 1.000000000000113。 , 使用 Double.ToString("F16") 结果 1.0000000000001100 , 使用 Double.ToString("F17") 结果 1.000000000000011000
我试过了 Double.ToString("0.0000000000000000") 结果 1.0000000000001100
似乎 ToString() 将第 14 个数字以上的所有小数设置为零。
我正在使用 .Net 4.5.2。 我怎么解决这个问题。
A float
和 double
浮点数 (IEEE 754) 在 Sign, Mantissa 和 Exponent in base 2,恰好数字 1.000000000000113
不适合 base 2 数。
但是,我们确实有 do 在 base 10 (decimal
) 上工作的浮点类型,它有更多有理数的精度,但没有数值范围
float
近似范围(±1.5 x 10^−45
到±3.4 x 1038
)double
近似范围(±5.0 × 10^−324
到±1.7 × 10308
)decimal
近似范围(±1.0 x 10^-28
到±7.9228 x 1028
)
样本
double val = 1.000000000000113;
Console.WriteLine(val);
decimal val2 = 1.000000000000113m;
Console.WriteLine(val2);
输出
1.00000000000011
1.000000000000113