c# - Math.Round 与 String.Format

标签 c#

我需要将 double 值四舍五入为 2 位数。 什么是优选的?

String.Format("{0:0.00}", 123.4567);      // "123.46"
Math.Round(123.4567, 2)                   // "123.46"

最佳答案

Math.Round(double,digits) with digits>0 在概念上非常不干净。但我认为永远不应该使用它。 double 是二进制 float ,因此没有明确定义的十进制数字概念。

我建议使用 string.Format,或者当您只需要为了十进制显示目的而舍入时只使用 ToString("0.00"),而 decimal.Round 如果您需要对实际数字进行四舍五入(例如在进一步计算中使用它)。

注意:使用 decimal.Round,您可以指定 MidpointRounding模式。通常需要 AwayFromZero 舍入,而不是 ToEven 舍入。

使用 ToEven 舍入 0.005m 舍入为 0.000.015 舍入为 0.02。这不是大多数人所期望的。

比较:

  • ToEven:3.75 轮到 3.8
  • ToEven:3.85 轮到 3.8 (这不是大多数人所期望的)
  • 远离零:3.75 轮到 3.8
  • AwayFromZero:3.85 轮到 3.9

有关更多信息,请参阅:https://msdn.microsoft.com/en-us/library/system.math.round.aspx

关于c# - Math.Round 与 String.Format,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8397592/

相关文章:

c# - 如何在C#中实现钢琴键频功能?

c# - 如何使用 C# 更快地将 400 万条记录从 Oracle 插入到 Elasticsearch 表中?

c# - 将系统从 .Net 2 升级到 .Net 3.5 或 4 对客户有什么好处

c# - 如何将带有数字的帕斯卡大小写转换为句子?

c# - 无法打开文件流进行读取,但我仍然可以复制文件?

c# - RegistrationServices.RegisterAssembly 错误 - 帮助!

C# - 用于创建基于 XSD 的 XML 编辑器的库

c# - 为单元格赋值时 DataGridView SLOW

c# - 如何拆分字符串并将它们写入同一 datagridview C# 中的不同行

c# - 为什么文件不能通过 tcp 在 C# 中的客户端和 C 中的服务器之间正确传输(保存?)?