c#舍入2位小数:截断与舍入
本文关键字:舍入 小数 2位 | 更新日期: 2023-09-27 18:17:12
我想知道在将浮点数舍入为2位小数时使用截断或四舍五入的优点和缺点:
float number = 3.4567070
Math.Round(number, 2)
Math.Truncate(100 * number) / 100
哪一个是最好和最有效的?什么时候使用圆整,什么时候使用截断?
Truncate的效率稍高一些,但这是两个非常不同的函数。
-
Math.Round
以指定的精度计算最接近输入的数字。将值舍入到最接近的整数或指定的小数位数。
-
Math.Truncate
有效地丢弃小数点后的任何数字。它将始终舍入到最接近于0的整数。计算一个数字的整部分
你应该使用哪个函数完全取决于你要实现的逻辑。
下面是每个函数的快速输出示例: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()
方法执行舍入操作。
一般来说,在编写代码时,您应该首先使用"正确"的方法,如果基准测试显示出性能问题,则只有在这时才应该尝试优化,例如您的"棘手"代码示例。
这取决于你的目的。我不认为一个比另一个更有效。这就像在说"我应该用钉子还是螺丝?"