Recursion 有人能解释一下这个erlang函数将一个数字四舍五入到小数点后的特定数量吗?

Recursion 有人能解释一下这个erlang函数将一个数字四舍五入到小数点后的特定数量吗?,recursion,erlang,Recursion,Erlang,我一辈子都搞不懂这个函数到底是怎么工作的。首先,你在函数中犯了一个错误。应该是: round(Number, Precision) -> Power = math:pow(10, Precision), round(Pi * Power) / Power. 当数字=10.23456且精度=2时,直线: round(Number, Precision) -> Power = math:pow(10, Precision), round(Number *

我一辈子都搞不懂这个函数到底是怎么工作的。

首先,你在函数中犯了一个错误。应该是:

round(Number, Precision) ->
    Power = math:pow(10, Precision),
    round(Pi * Power) / Power.
当数字=10.23456且精度=2时,直线:

round(Number, Precision) ->
    Power = math:pow(10, Precision),
    round(Number * Power) / Power.
结果:

Power = math:pow(10, Precision)
数字*的幂等于:

Power = 10 * 10 = 100
 1023.456
即:

 10.23456 * 100
那么,round1023.456等于:

Power = 10 * 10 = 100
 1023.456
将该数字除以幂或100,得到:

1023
您使用的算法如下所示:

将您感兴趣的小数位数移到小数点的左侧。如果要保留小数点后一位,则将数字乘以10=>102.3456;如果要保留两位小数,则将该数字乘以100=>1023.456;如果要保留小数点后3位,则将数字乘以1000=>10234.56;等等

使用舍入法去除小数点右边的所有内容

将要保留的小数位数移回小数点右侧

因此,如果您有数字10.23456,并且希望保留小数点后1位,如果您按照算法中的步骤进行操作,您将得到:

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.
当数字=10.23456且精度=2时,直线:

round(Number, Precision) ->
    Power = math:pow(10, Precision),
    round(Number * Power) / Power.
结果:

Power = math:pow(10, Precision)
数字*的幂等于:

Power = 10 * 10 = 100
 1023.456
即:

 10.23456 * 100
那么,round1023.456等于:

Power = 10 * 10 = 100
 1023.456
将该数字除以幂或100,得到:

1023
您使用的算法如下所示:

将您感兴趣的小数位数移到小数点的左侧。如果要保留小数点后一位,则将数字乘以10=>102.3456;如果要保留两位小数,则将该数字乘以100=>1023.456;如果要保留小数点后3位,则将数字乘以1000=>10234.56;等等

使用舍入法去除小数点右边的所有内容

将要保留的小数位数移回小数点右侧

因此,如果您有数字10.23456,并且希望保留小数点后1位,如果您按照算法中的步骤进行操作,您将得到:

102.3456 102 10.2 对于数字10.23456,如果要保留小数点后2位,请按照算法中的步骤进行操作,得到:

1023.456 1023 10.23 对于数字10.23456,如果要保留3位小数,请按照算法中的步骤操作,得到:

10234.56 10234 10.234