【问题标题】:How can I round a decimal up to the nearest x.x9 in C#如何在 C# 中将小数四舍五入到最接近的 x.x9
【发布时间】:2018-02-09 05:57:25
【问题描述】:

正如标题所述,我需要将十进制数字四舍五入到以 9 结尾的下一个小数点后 2 位数字。例如:

1.07 -> 1.09
1.11 -> 1.19
1.99 -> 1.99

我已经阅读了 c# 的 Math.round 文档,但我找不到任何可以完成此操作的内容。

我目前的实现是这样的:

x = decimal.Parse(Math.Round(x),2);
x = decimal.Parse(x.ToString().Remove(x.Length -1,1) + "9")

但这似乎草率且效率很重要,因为我将处理成千上万个项目。一定有更好的办法。

谢谢

【问题讨论】:

  • 四舍五入到最接近的十分之一,减去 -0.01...
  • @MikeMcCaughan - 那行不通。如果您从5 开始,那么该方法将返回4.99(这将是向下移动)。
  • 很确定我以前在 SO 上看到过这个确切的问题,现在搜索所有重复项......
  • @Enigmativity 我不确定你在说什么。您似乎将其读作“将其四舍五入到最接近的整数”,而实际上它说的是“将其向上四舍五入到最接近的十分之一”。
  • @MikeMcCaughan 如果输入为 5,则四舍五入到最接近的十分之一是 5 和 5 - 0.01 是 4.99。此外,四舍五入到最接近的十分之一的 5.1 仍然是 5.1,而 5.1-0.01 是 5.09,结果应该是 5.19

标签: c#


【解决方案1】:

你可以把数字四舍五入再加0.09:

Math.Floor(x * 10) / 10 + 0.09

【讨论】:

  • 只要x 不是一个整数就可以使用,但是是的,Floor 是这里的方法。
  • @InBetween 将 1 舍入到 1.09 不是所需的行为吗?
  • 应该注意,这只适用于正数。
  • 是的,将 1 舍入到 1.09 是期望行为,只为正数工作确实适用于我的用例。
  • 我猜是 ;)
猜你喜欢
  • 2021-08-01
  • 1970-01-01
  • 2011-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多