#include <stdio.h>
#include <math.h>
int main(){
printf("Rounded value of 6*0.95*0.25 = %.2f\n", round(6*0.95*0.25*100)/100);
printf("Rounded value of 1.425 = %.2f\n", round(1.425*100)/100);
}
我怀疑这与 double 和各自算术的准确性有关,但我如何解决这个问题(例如 6*0.95*0.25 即 1.425 将四舍五入到 1.43)我不知道.. ..
(我使用的是 GNU 编译器最新版本(1.7 左右))
感谢帮助
我正在尝试舍入为 2 d.p。
以下是输出:
舍入值 6*0.95*0.25 = 1.42
四舍五入后的值 1.425 = 1.43
( https://onlinegdb.com/r1ZtZ2lCW )
我要
舍入值 6*0.95*0.25 = 1.43
四舍五入后的值 1.425 = 1.43
最佳答案
math.h 中的舍入完全按照其应有的方式进行。当您为程序提供一个十进制数(例如 1.425)时,它会将其存储为该数字最接近的二进制表示形式。数字 1.425 = 57/40。由于 40 不是 2 的幂,因此该数字没有精确的二进制表示形式。在本例中,存储的数字略小于 1.425,因此该数字向下舍入。
阻止这种舍入差异的唯一通用解决方案是使用十进制浮点实现。除非硬件支持,否则这将比二进制浮点实现慢得多。
关于c - C 中的舍入(math.h)无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46975814/