我想知道在将浮点数舍入到 2 位小数时使用 Truncate 或 Round 有哪些优点和缺点:
float number = 3.4567070
Math.Round(number, 2)
Math.Truncate(100 * number) / 100
哪个是最好和最有效的?何时使用圆形,何时使用截断?
截断稍微更有效,但这些是非常不同的功能。
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
如果您尝试四舍五入到小数点后两位,我强烈建议您使用Round()
而不是Truncate()
,如果没有其他原因,除了可读性和可维护性。您的示例乍一看有点令人困惑,需要进行一些分析才能理解它有效地使用了一些花哨的步法来获得Truncate()
执行舍入操作的方法。
一般来说,在编写代码时,您应该首先使用“正确”的方法,如果基准测试显示性能问题,那么您才应该尝试优化,例如您的“棘手”代码示例。
这取决于你的目的。我不认为一个比另一个更有效。这就像在说“我应该使用钉子还是螺丝钉?” 他们做不同的事情。