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

时间:2013-06-05 21:03:20

标签: c# truncate rounding

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

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

哪一个最好,最有效?何时使用round和when truncate?

3 个答案:

答案 0 :(得分:7)

截断效率略高,但这些功能非常不同。

  • 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 

答案 1 :(得分:0)

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

答案 2 :(得分:0)

如果你想要舍入到2位小数,我 高度 建议使用Round()代替Truncate(),如果没有其他原因可读性和可维护性。您的示例乍一看有点令人困惑,需要进行一些分析才能理解它是否有效地使用了一些花哨的步法来使Truncate()方法执行舍入操作。

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