【问题标题】:Round the fractional part of the decimal number to a set value将十进制数的小数部分四舍五入为设定值
【发布时间】:2018-11-09 12:21:42
【问题描述】:

我希望将数字的小数部分更改为自定义值。

例如:

  • 2,34 - 2,99
  • 3,74 - 3,99
  • 4,11 - 4,99

所以我想将数字四舍五入为 99。使用 .NET,我该怎么做?

【问题讨论】:

  • Math.Round 接受指定舍入模式的参数。但是,如果您想要自定义舍入逻辑,则必须自己编写。
  • 使用圆形天花板,如果结果与输入不同,则从结果中减去 0.01 并将其用作返回值。
  • 想知道有没有可以自己自定义的方法。我要解决@Igor
  • @abdullahçelik 您希望整数发生什么变化:5,00 应该保持不变还是应该更改为 5,99?
  • 那么大于 .99 的值(例如 .999)应该舍入到 .99 还是保持不变或其他?

标签: .net rounding decimalformat


【解决方案1】:

这会将带小数的值“四舍五入”为.99,而其他值保持不变。

decimal Round99(decimal value) => 
  value % 1 == 0 ? 
      value : 
      value < 0 ? 
          decimal.Floor(value) + 0.01M :
          decimal.Ceiling(value) - 0.01M;

结果:

1.999 --> 1.99
1.5   --> 1.99
1     --> 1
-1.5  --> -1.99

【讨论】:

    【解决方案2】:

    您想忽略分数 => 使用 Math.Truncate
    然后你想将分数设置为 0.99 => 添加 0.99

    Function Make99(x As Decimal) As Decimal
        Return Math.Truncate(x) + 0.99D
    End Function
    
    Sub Main()
        Dim testData = {2.34D, 3.74D, 4.11D, 5D}
    
        For Each t In testData
            Console.WriteLine(t.ToString("0.00") & " - " & Make99(t))
        Next
    
        Console.ReadLine()
    
    End Sub
    

    输出:

    2.34 - 2.99
    3.74 - 3.99
    4.11 - 4.99
    5.00 - 5.99

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-30
      相关资源
      最近更新 更多