您能解释一下这段代码吗:
printf("Value1: %0.1f \n", (float)124/100); // = 1.2
printf("Value1: %0.1f \n", (float)125/100); // = 1.2
printf("Value1: %0.1f \n", (float)126/100); // = 1.3
printf("\n");
printf("Value2: %0.1f \n", (float)134/100); // = 1.3
printf("Value2: %0.1f \n", (float)135/100); // = 1.4
printf("Value2: %0.1f \n", (float)136/100); // = 1.4
为什么数字125舍入到1.2,而数字135舍入到1.4? 例如,这也会发生在数字105、115、125、155和165上。
if(fegetround()== FE_TONEAREST){printf(“Value1:%0.1f%。20f \ n”,(double)125/100,1.25); printf(”Value1:%0.1f%。20f \ n“,(double)175/ 100,1.75);}
会打印出Value1:1.2 1.25000000000000000000
Value1:1.8 1.75000000000000000000
。我认为这与printf内部和7.21.6.1的语言法律有关:“表示浮点数的双精度参数以样式[−]ddd.ddd转换为十进制表示法,小数点字符后面的数字位数等于精度规范。” - Lundin