强制Ruby不以标准格式/科学记数法/指数表示法输出浮点数

时间:2013-05-06 17:48:37

标签: ruby

我遇到与python相同的问题here,但对于ruby。

我需要输出一个这样的小数字:0.00001,而不是1e-5。

有关我的特定问题的详细信息,我将使用f.write("My number: " + small_number.to_s + "\n")

输出到文件

对于我的问题,准确性并不是一个大问题,所以只需要做一个if语句来检查small_number< 1e-5然后打印0就可以了,它看起来并不像它应该的那么优雅。

那么更通用的方法是什么?

4 个答案:

答案 0 :(得分:8)

f.printf "My number: %.5f\n", small_number

你可以用你喜欢的任何特定格式大小替换.5(小数点右边的5位数),例如,%8.3f将是8位数的总和,小数点右边有三位,很像C / C ++ printf格式化字符串。

答案 1 :(得分:5)

如果您总是想要5位小数,可以使用:

"%.5f" % small_number

答案 2 :(得分:2)

我会做这样的事情,这样你就可以去除尾随的零点:

puts ("%.15f" % small_number).sub(/0*$/,"")

不要超过15,否则你会受到浮点数不精确的影响。

puts ("%.25f" % 0.01).sub(/0*$/,"")
0.0100000000000000002081668

答案 3 :(得分:0)

这也适用于整数,修剪多余的零,并始终将数字作为有效的浮点数返回。为了清楚起见,它使用sprintf而不是更隐秘的%运算符。

def format_float(number)
  sprintf('%.15f', number).sub(/0+$/, '').sub(/\.$/, '.0')
end

示例:

format_float(1) => "1.0"
format_float(0.00000001) => "0.00000001"