gpt4 book ai didi

c# - 四舍五入

转载 作者:可可西里 更新时间:2023-11-01 09:14:13 27 4
gpt4 key购买 nike

我有这个“科学应用程序”,其中 Single 值在显示在 UI 中之前应该四舍五入。根据this MSDN article ,由于“精度损失”,Math.Round(Double, Int32) 方法有时会出现“意外”行为,例如将 2.135 四舍五入为 2.13 而不是 2.14。

据我了解,此问题与“银行家四舍五入”无关(参见示例 this question)。

在应用程序中,显然有人选择通过在舍入之前将 Single 显式转换为 Decimal 来解决此问题(即 Math.Round((Decimal) mySingle, 2)) 改为调用 Math.Round(Decimal, Int32) 重载。除了可能出现的二进制到十进制转换问题之外,如果 Single 值太小或太大而无法容纳,此“解决方案”还可能导致抛出 OverflowException Decimal 类型。

如果转换失败,捕获此类错误以从 Math.Round(Double, Int32) 返回结果,这并不是完美的解决方案。重写应用程序也不会一直使用 Decimal

是否有或多或少“正确”的方法来处理这种情况,如果有,可能是什么?

最佳答案

我认为您现有的解决方案(使用 Math.Round 的 Decimal 版本)是正确的。

潜在的问题是您希望数字根据以 10 为底的表示形式进行四舍五入,但您已将它们存储为以 2 为底的 float 。提供的 2.135 示例是基数 2 表示与基数 10 不完全匹配的边缘情况之一。

要获得预期的舍入行为,您必须将数字转换为以 10 为基数。最简单的方法正是您已经在做的:暂时将数字转换为 Decimal 足以调用 Math.Round

关于c# - 四舍五入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31053724/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com