给定小数位数,将字符串转换为十进制

时间:2018-02-12 15:07:54

标签: ruby

有一种聪明的方式来获取

result == 22.000000000000000000

从这些值开始?

str = "22000000000000000000"
decimals = 18

另一个例子:

str = "4500000000001"
decimals = 8
result == 45000.00000001

1 个答案:

答案 0 :(得分:2)

采取以上所有评论:

"%0.#{decimals}f" % (str.to_f / 10 ** decimals)

但它聪明吗?可能不是......它可能会产生不正确的结果,例如使用"22000000000000000001"会导致"22.000000000000000000",尽管它确实会在原始问题中使用示例值生成预期结果。

这是另一个选项,可以产生与上面完全相同的结果,但更紧凑,并且总会产生预期的结果:

str.insert(-decimals - 1, ".")

您可以使用.to_f将这两者转换为浮点数,但结果将始终为22.0,而不是原始问题的预期值。