Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ruby中设置浮点的显示精度_Ruby_Floating Point_Precision - Fatal编程技术网

在Ruby中设置浮点的显示精度

在Ruby中设置浮点的显示精度,ruby,floating-point,precision,Ruby,Floating Point,Precision,可以在Ruby中设置浮点的显示精度吗 比如: z = 1/3 z.to_s #=> 0.33333333333333 z.to_s(3) #=> 0.333 z.to_s(5) #=> 0.33333 puts "%5.2f" % [1.0/3.0] 或者我是否必须覆盖Float的to_s方法?您可以使用sprintf: sprintf("%0.02f", 123.4564564) 我通常只在开放代码中进行转换,比如: z = 1/3 z.to

可以在Ruby中设置浮点的显示精度吗

比如:

z = 1/3
z.to_s    #=> 0.33333333333333
z.to_s(3) #=> 0.333
z.to_s(5) #=> 0.33333
puts "%5.2f" % [1.0/3.0] 
或者我是否必须覆盖
Float
to_s
方法?

您可以使用sprintf:

sprintf("%0.02f", 123.4564564)

我通常只在开放代码中进行转换,比如:

z = 1/3
z.to_s    #=> 0.33333333333333
z.to_s(3) #=> 0.333
z.to_s(5) #=> 0.33333
puts "%5.2f" % [1.0/3.0] 
Ruby调用这样的表达式,因为字符串上有一个。如果这对你来说有什么意义的话,可以把它看作是Ruby的printf。

z.round(2)
x.round(3)
是最简单的解决方案。看

也就是说,这只会确保它不超过那么多数字。在1/3的情况下,这很好,但是如果你说
0.25。第(3)轮
你将得到0.25,而不是0.250。

你可以使用puts

z = #{'%.3f' % z}
Rubocop建议使用over
#sprintf
并使用带注释的字符串标记

#format
的语法为

%[flags][width][.precision]type
例如:

# Ensure we store z as a float by making one of the numbers a float.
z = 1/3.0

# Format the float to a precision of three.
format('%<num>0.3f', num: z)
# => "0.333"

format('%<num>0.5f', num: z)
# => "0.33333"

# Add some text to the formatted string
format('I have $%<num>0.2f in my bank account.', num: z)
# => "I have $0.33 in my bank account."
#通过将其中一个数字设为浮点数,确保将z存储为浮点数。
z=1/3.0
#将浮点设置为精度为3的格式。
格式(“%0.3f”,编号:z)
# => "0.333"
格式(“%0.5f”,数量:z)
# => "0.33333"
#在格式化字符串中添加一些文本
格式('我的银行帐户中有$%0.2f',num:z)
#=>“我的银行账户中有0.33美元。”
参考资料:


那么z.round(2)和z.round(3)呢?在提出这个问题时,round(精确)并不存在:)仅供参考,它是在Ruby 1.9.2中添加的,因此它在早期版本+1中不适用于
(0.25).round(3)
不屈服
0.250
请参见安德烈亚斯·博尼尼(Andreas Bonini)的答案,了解解决这个问题的方法。有人能解释一下吗?这一个给了我一个主要的空格字符。我使用了安德烈亚斯的答案,它没有空格字符。我无法理解关于这个的文档,否则我会解释为什么lolI更喜欢这个,因为我想要
round(2)
没有给出的“.00”。这有点有趣,我一生中从未使用过ruby。我不知道如何编写hello world程序,但我从来没有这样做过。我可能只是在谷歌上搜索了OP的问题并发布了答案。
放上“你好,世界”
——哈哈!现在你知道如何编写hello world程序了!。。。虽然使用
put
有点讽刺意味,因为显然
sprintf
也能工作。@KyleStrand使用
put
讽刺意味着什么?它以一种与预期相反的方式发生了什么?它是如何引起苦笑的?