我想知道在将浮点数四舍五入到两位小数时,使用Truncate或Round有哪些优缺点:
float number = 3.4567070
Math.Round(number, 2)
Math.Truncate(100 * number) / 100
哪一个是最好和高效的?何时使用round,何时使用truncate?
截断函数(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
如果您正在尝试四舍五入到2位小数,我强烈建议使用Round()
而不是Truncate()
,即使只是为了可读性和可维护性。您的示例一开始有点令人困惑,需要进行一些分析才能理解它是如何使用一些花哨的技巧来让Truncate()
方法执行四舍五入操作。
通常,在编写代码时,您应该首先使用"正确"的方法,如果基准测试显示性能问题,则仅在这种情况下应尝试优化,例如您的“棘手”代码示例。
这取决于你的目的。我认为它们之间没有一个更有效率。这就像问“我应该使用钉子还是螺丝?”它们有不同的用途。