5

我想知道在将浮点数舍入到 2 位小数时使用 Truncate 或 Round 有哪些优点和缺点:

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

哪个是最好和最有效的?何时使用圆形,何时使用截断?

4

3 回答 3

11

截断稍微更有效,但这些是非常不同的功能。

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

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

  • Math.Truncate有效地丢弃小数点后的任何数字。它总是四舍五入到最接近零的整数。

    计算数字的整数部分

您应该使用哪个功能完全取决于您尝试实现的逻辑。

以下是每个函数的快速示例输出:

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 
于 2013-06-05T21:07:45.077 回答
0

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

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

于 2013-06-05T21:31:18.023 回答
0

这取决于你的目的。我不认为一个比另一个更有效。这就像在说“我应该使用钉子还是螺丝钉?” 他们做不同的事情。

于 2013-06-05T21:07:43.170 回答