我正在查看MSDN documentation for System::Convert::ToUInt32(Double),并且返回值被声明"值四舍五入到最接近的32位无符号整数。如果值在两个整数之间,则返回偶数;也就是说,4.5转换为4,5.5转换为6。"这似乎是一个非常奇怪的数字轮回方式,实际上似乎使该函数不适合我想要使用它的大多数情况。任何理由应该是这样的吗?
答案 0 :(得分:2)
这个问题似乎与C ++编程语言(尽管有标签)有关,但与C#有关。
这是up-to-date official documentation for Convert.Uint32(double), 这实现了通常所说的“圆形一半甚至”或“银行家四舍五入”,参见wikipedia的参考文献。
IEEE 754标准(wikipedia reference here)描述了浮点数(例如double)的舍入规则。微软只是遵循这些规则。
作为补充,“银行家四舍五入”不会像“半零距离”方法那样遭受负面或正面偏见,至少在大多数合理分布上都是如此。因此,它被认为是一种“更好”的舍入方法。