C#四舍五入保留两位小数:截取 vs 四舍五入

5

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

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

哪一个是最好和高效的?何时使用round,何时使用truncate?


在你的例子中,你使用截断函数来充当四舍五入函数。 - Sayse
3个回答

13

截断函数(Truncate)效率略高,但这两个函数有很大差别。

  • 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 

0

如果您正在尝试四舍五入到2位小数,我强烈建议使用Round()而不是Truncate(),即使只是为了可读性和可维护性。您的示例一开始有点令人困惑,需要进行一些分析才能理解它是如何使用一些花哨的技巧来让Truncate()方法执行四舍五入操作。

通常,在编写代码时,您应该首先使用"正确"的方法,如果基准测试显示性能问题,则仅在这种情况下应尝试优化,例如您的“棘手”代码示例。


-1

这取决于你的目的。我认为它们之间没有一个更有效率。这就像问“我应该使用钉子还是螺丝?”它们有不同的用途。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接