我想知道是否有办法克服精确度问题,这似乎是我的机器内部表示浮点数的结果:
为清楚起见,问题归纳为:
// str is "4.600"; atof( str ) is 4.5999999999999996
double mw = atof( str )
// The variables used in the columns calculation below are:
//
// mw = 4.5999999999999996
// p = 0.2
// g = 0.2
// h = 1 (integer)
int columns = (int) ( ( mw - ( h * 11 * p ) ) / ( ( h * 11 * p ) + g ) ) + 1;
Run Code Online (Sandbox Code Playgroud)
在转换为整数类型之前,列计算的结果是1.9999999999999996; 距离2.0的理想结果还差不多.
任何建议最受欢迎.
可能重复:
处理浮点数中的精度问题
而99.99*0.01 = 0.99
显然这是一个古老的浮点舍入问题,但是这种情况下的舍入误差对我来说似乎很大; 我的意思是我可能预期结果为0.99990000001或某些类似的'接近'结果.
为了记录,我在JavaVM和.Net环境中得到了相同的答案.