c#舍入2位小数:截断与舍入

本文关键字:舍入 小数 2位 | 更新日期: 2023-09-27 18:17:12

我想知道在将浮点数舍入为2位小数时使用截断或四舍五入的优点和缺点:

float number = 3.4567070
Math.Round(number, 2)
Math.Truncate(100 * number) / 100

哪一个是最好和最有效的?什么时候使用圆整,什么时候使用截断?

c#舍入2位小数:截断与舍入

Truncate的效率稍高一些,但这是两个非常不同的函数。

  • Math.Round以指定的精度计算最接近输入的数字。

    将值舍入到最接近的整数或指定的小数位数。

  • Math.Truncate有效地丢弃小数点后的任何数字。它将始终舍入到最接近于0的整数。

    计算一个数字的整部分

你应该使用哪个函数完全取决于你要实现的逻辑。

下面是每个函数的快速输出示例:
Input | Round | Truncate
------+-------+---------
 -1.6 |    -2 |       -1 
 -1.5 |    -2 |       -1 
 -1.4 |    -1 |       -1 
 -0.5 |     0 |        0 
  0.5 |     0 |        0 
  1.4 |     1 |        1 
  1.5 |     2 |        1 
  1.6 |     2 |        1 

如果您试图四舍五入到2位小数,我强烈建议使用Round()而不是Truncate(),如果没有其他原因,而不是可读性&可维护性。您的示例乍一看有点令人困惑,需要进行一些分析才能理解它实际上使用了一些花哨的方法来让Truncate()方法执行舍入操作。

一般来说,在编写代码时,您应该首先使用"正确"的方法,如果基准测试显示出性能问题,则只有在这时才应该尝试优化,例如您的"棘手"代码示例。

这取决于你的目的。我不认为一个比另一个更有效。这就像在说"我应该用钉子还是螺丝?"