我的问题,简而言之,为什么浮点数的舍入误差只会在计算后显示出来,而不是存储文字?将十进制浮点数转换为二进制并返回
我的意思是这个 - 我知道由于从十进制转换为二进制和返回时浮动四舍五入误差引起的问题。
例如,在Java中:然后
double a = 10.567;
double b = 2.16;
double c = a * b;
C存储,而不是22.82472值22.824720000000003。
这是因为结果22.82472不能准确地存储在双精度型的有限二进制数字中。 然而,10.567和2.16(即a和b)都不是。
但是,如果我打印的a和b的值,他们打印出来,没有任何舍入误差。为什么舍入错误不会显示在这里?
这是否意味着浮点文字的表示与浮点计算结果的表示有某种不同?
它的输出格式化。例如。在C#中''c.ToString()'''c.ToString(“R”)'(''R''强制.Net返回所有位而没有任何向上取整)时将返回'22.82472''将返回'22.824720000000003' –
@DmitryBychenko我尝试使用Java格式化c作为String,它仍然返回22.824720000000003。 –