由于精度错误,我很清楚0.1+0.2 != 0.3
。但是我需要它等于0.3。
我的解决方案是:
add
函数,返回正确的double
。这适用于0.49999999999999994和0.30000000000000004。
我如何实现这样的舍入函数?还有另一种方式吗?
答案 0 :(得分:2)
从小数分数0.1和0.2转换为double的那一刻起存在问题,得到0.1000000000000000055511151231257827021181583404541015625和0.200000000000000011102230246251565404236316680908203125。两者都小于小数。最接近它们的两倍,即0.3000000000000000444089209850062616169452667236328125,是0.3的下一个翻倍。最接近0.3的双倍小,0.299999999999999988897769753748434595763683319091796875
如果你需要精确的十进制算术,不仅非常非常接近,你需要使用十进制算术类型,而不是双倍。