如何将科学记数法字符串转换为十进制表示法?

时间:2011-12-21 07:28:27

标签: ruby regex

我想将findconvert csv文件中的所有科学记数字符串改为十进制表示法,例如:

1.0e-05 to 0.00001

我怎么能在红宝石中做到这一点?

2 个答案:

答案 0 :(得分:24)

只需使用字符串转换。浮动的必要强制将自动完成:

"%f" % "1.0e-05"
=> "0.000010"

# Which, behind the scenes is the same as:
"%f" % "1.0e-05".to_f
=> "0.000010"

根据需要进行调整以获得更高或更低的准确度。例如:

"%.5f" % "1.0e-05"
=> "0.00001"

如果你想得到真正的幻想并在最后砍掉不必要的零,这是一种方式。 (希望有人会建议更优雅的东西;我想不出任何东西):

("%.20f" % "1.0e-05").sub(/\.?0*$/, "")
=> "0.00001"

答案 1 :(得分:7)

如果你有兴趣对数字进行任何数学计算而且它太小了:

"%f" % "1.0e-10"
=> "0.000000"

# not so good for various reasons
("%f" % "1.0e-10") == ("%f" % "1.0e-8")
=> true

您可以使用BigDecimal:

BigDecimal.new "1.0e-10"
=> #<BigDecimal:7ffdf6c38678,'0.1E-9',9(18)>