我正在尝试使用数学圆找到一个浮点数 我找到了以下
0.5 --> 0
1.5 --> 2
2.5 --> 2
3.5 --> 4
等等。 我相信这是由于浮点错误,但不太确定如何。 我怎样才能解决这个问题呢?
答案 0 :(得分:8)
最接近a的整数。 如果a的分数成分是中途 在两个整数之间,其中一个是偶数,另一个是奇数,然后是 返回偶数。请注意,此方法返回Double 而不是整数类型。
Math.Round
方法有一些overloads,它将MidpointRounding
作为参数,如果它位于两个数字之间,您可以指定舍入值。
AwayFromZero
如果一个数字介于另外两个数字之间,那么它将向四舍五入 最接近的数字。
ToEven
如果一个数字介于另外两个数字之间,那么它将向四舍五入 最近的偶数。
答案 1 :(得分:6)
你可以使用这个,克服你所说的:
Math.Round(value, MidpointRounding.AwayFromZero);
使用上述内容:
如果一个数字介于另外两个数字之间,那么它将向四舍五入 最接近的数字。
有关MidpointRounding
枚举的进一步文档,请查看here。
答案 2 :(得分:2)
您可以尝试这样
Math.Round(value, MidpointRounding.AwayFromZero);
来自MSDN
如果a的小数分量在两个整数之间,则为1 其中是偶数,另一个是奇数,然后返回偶数。
另外要提一点我认为值得一提的是微软已经跟随 IEEE 754 standard 。在备注下的MSDN for Math.Round中也提到了这一点:
舍入到最近,连接到偶数 - 舍入到最接近的值;如果数字中间下降,则用a舍入到最接近的值 偶数(零)最低有效位,50%的时间发生;这个 是二进制浮点的默认值和建议的默认值 为十进制。
舍入到最近,与零相关 - 舍入到最接近的值;如果数字中途下降,则四舍五入到最接近的值 以上(正数)或以下(负数);这是 打算作为十进制浮点的选项。
答案 3 :(得分:0)
这被称为银行家四舍五入(圆到均匀)。您可以阅读更多相关信息here。这是一个.NET Framework功能,并按设计工作。