【问题标题】:C# - Math.RoundC# - Math.Round
【发布时间】:2009-10-05 16:13:33
【问题描述】:

我试图了解如何使用 C# 舍入到最接近的十分位。例如,我有一个 double 类型的值。这个双倍目前设置为 10.75。但是,我需要四舍五入然后截断十位以上的所有内容。在这种情况下,我正在寻求 10.8 的值。 C#如何四舍五入到十分位?

谢谢!

【问题讨论】:

  • 既然您显然知道 math.round,听起来好像它对您不起作用。您能否展示您的尝试并解释它与您的预期有何不同?

标签: c# rounding


【解决方案1】:
Math.Round(yourNumber, 1)

第二个参数是要四舍五入的小数位数。在您的情况下,您需要 1 个小数位作为最终结果。

【讨论】:

    【解决方案2】:

    您只需要使用带有decimals 参数的overload of Math.Round

    Math.Round(10.75, 1) // returns 10.8
    

    只是为了比较:

    Math.Round(10.75)    // returns 11
    Math.Round(10.75, 0) // returns 11
    Math.Round(10.75, 2) // returns 10.75
    

    【讨论】:

      【解决方案3】:

      由于您在标题中使用了Math.Round(),我假设您已经尝试了基本的Math.Round(10.75,1) 方法,并且它返回了您意想不到的结果。考虑到这一点,我建议查看该函数的一些不同重载,特别是接受 MidPointRounding 枚举的重载:

      http://msdn.microsoft.com/en-us/library/f5898377.aspx

      【讨论】:

      • 非常奇怪的默认行为不是“标准数学行为”
      • “标准数学行为”实际上在很大程度上取决于上下文。
      【解决方案4】:

      您真的需要对其进行四舍五入,还是可以将其格式化以便打印,但让变量本身保持其精度?比如:

      decimal value = 10.75;
      value.ToString ("#.#");
      

      【讨论】:

        【解决方案5】:

        如果你只想“删减”小数点后的所有内容,这应该可行:

           return Math.Round(value * 10)/10
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-06-11
          • 2011-05-27
          • 1970-01-01
          • 2023-03-30
          • 2020-07-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多