·
#include __FILE__

找了半天,似乎标准库没有规定舍入的方法,只保证了位数

不过我今天刚好看了IEEE 754的舍入标准,一般使用向偶数舍入的方法,我想你用的编译器就是采用这种方法的,正好对的上,80.555->80.56,90.845->90.84,看和你要保留的最后一位的距离,这样保证了落到两边的概率是50%,在计算概率论的一些东西的时候不会有很大的误差

然后我也在微软的文档找到了相应的说明,printf、_printf_l、wprintf、_wprintf_l | Microsoft Docs

从 Windows 10 版本 2004 (build 19041) 开始, printf 函数系列按用于舍入的 IEEE 754 规则打印完全可表示的浮点数。 在以前版本的 Windows 中,将始终向上舍入以 "5" 结尾的精确表示浮点数。 IEEE 754 指出它们必须舍入到最接近的偶数 (也称为 "银行家舍入" ) 。 例如,和 printf("%1.0f", 2.5) 都 printf("%1.0f", 1.5) 应该舍入为2。 以前,1.5 将舍入为2,2.5 将舍入为3。 此更改只影响精确的可表示数字。 例如,2.35 (当在内存中表示时,) 将继续向上舍入到2.4。 这些函数所做的舍入现在还遵循由设置的 fesetround 浮点舍入模式。 以前,舍入始终选择 FE_TONEAREST 行为。 此更改仅影响使用 Visual Studio 2019 16.2 版和更高版本生成的程序。 若要使用旧的浮点舍入行为,请使用链接 legacy_stdio_float_rounding.obj 。

这就更印证了我认为的没有舍入标准的说法,实际上你要注意有些东西不能先入为主,四舍五入是我们生活中惯用的舍入方法,程序里也不一定表现为四设五入,不过好在你的求知欲帮你“矫正”了

Replies
1

it's the perfect answer that I want to recieve smile thank you very much smile 真的非常有用,你说得对,在求学和探索的道路上不能带着自己的惯性思维先入为主。谢谢你愿意花时间为我答疑解惑。(我的编译环境是VS2019)