我遇到与python相同的问题here,但对于ruby。
我需要输出一个这样的小数字:0.00001,而不是1e-5。
有关我的特定问题的详细信息,我将使用f.write("My number: " + small_number.to_s + "\n")
对于我的问题,准确性并不是一个大问题,所以只需要做一个if语句来检查small_number< 1e-5然后打印0就可以了,它看起来并不像它应该的那么优雅。
那么更通用的方法是什么?
答案 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"