我正在尝试使用ToString()方法显示一个双精度值。 该值为1.000000000000113。 ,使用Double.ToString(“ F16”)结果1.0000000000001100 ,使用Double.ToString(“ F17”)结果1.00000000000011000
我尝试过 Double.ToString(“ 0.0000000000000000”)结果1.0000000000001100
ToString()似乎将第14个数字以上的所有分数都设置为零。
我正在使用.Net 4.5.2。 我怎么解决这个问题。
答案 0 :(得分:5)
一个float
和double
浮点数(IEEE 754)用于 Sign , Mantissa 和指数在 base 2 中,恰好发生了数字1.000000000000113
不适合 base 2 数字。
但是,我们确实有浮点类型,它们可以在 base 10 (decimal
)上进行做工作,它对有理数的精度更高,但是对t的数字范围
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