有人可以解释这个 erlang 函数来将数字四舍五入到特定数量的小数位吗?
Could someone explain this erlang function to round a number to a specific amount of decimal places?
round(Number, Precision) ->
Power = math:pow(10, Precision),
round(Pi * Power) / Power.
我这辈子都搞不懂这个函数到底是怎么工作的。
首先,你的函数有误。应该是:
round(Number, Precision) ->
Power = math:pow(10, Precision),
round(Number * Power) / Power.
使用 Number = 10.23456
和 Precision = 2
,行:
Power = math:pow(10, Precision)
结果:
Power = 10 * 10 = 100
而Number * Power
等于:
10.23456 * 100
即:
1023.456
那么,round(1023.456)
等于:
1023
将该数字除以幂或 100,得到:
10.23
您使用的算法是这样工作的:
将您希望保留的小数位数移至小数点左侧。如果要保留一位小数,则将数字乘以 10 (=> 102.3456);如果你想保留两位小数,你将数字乘以 100 (=> 1023.456);如果你想保留 3 位小数,你将数字乘以 1000 (=> 10234.56);等等
使用 round() 去掉小数点右边的所有内容。
将要保留的小数位数移回小数点右侧。
因此,如果您有数字 10.23456 并且您希望保留一位小数,如果您按照算法中的步骤进行操作,您将得到:
- 102.3456
- 102
- 10.2
对于数字 10.23456 并希望保留 2 位小数,如果您按照算法中的步骤进行操作,您将得到:
- 1023.456
- 1023
- 10.23
对于数字 10.23456 并希望保留 3 位小数,如果按照算法中的步骤进行操作,您将得到:
- 10234.56
- 10234
- 10.234
round(Number, Precision) ->
Power = math:pow(10, Precision),
round(Pi * Power) / Power.
我这辈子都搞不懂这个函数到底是怎么工作的。
首先,你的函数有误。应该是:
round(Number, Precision) ->
Power = math:pow(10, Precision),
round(Number * Power) / Power.
使用 Number = 10.23456
和 Precision = 2
,行:
Power = math:pow(10, Precision)
结果:
Power = 10 * 10 = 100
而Number * Power
等于:
10.23456 * 100
即:
1023.456
那么,round(1023.456)
等于:
1023
将该数字除以幂或 100,得到:
10.23
您使用的算法是这样工作的:
将您希望保留的小数位数移至小数点左侧。如果要保留一位小数,则将数字乘以 10 (=> 102.3456);如果你想保留两位小数,你将数字乘以 100 (=> 1023.456);如果你想保留 3 位小数,你将数字乘以 1000 (=> 10234.56);等等
使用 round() 去掉小数点右边的所有内容。
将要保留的小数位数移回小数点右侧。
因此,如果您有数字 10.23456 并且您希望保留一位小数,如果您按照算法中的步骤进行操作,您将得到:
- 102.3456
- 102
- 10.2
对于数字 10.23456 并希望保留 2 位小数,如果您按照算法中的步骤进行操作,您将得到:
- 1023.456
- 1023
- 10.23
对于数字 10.23456 并希望保留 3 位小数,如果按照算法中的步骤进行操作,您将得到:
- 10234.56
- 10234
- 10.234