2017-08-16 60 views
0

我基本上想要一个精确到小数点后的第六个的浮点数。有没有一种更有效的方式来产生一个浮点到Ruby中的特定十进制值?

喜欢的东西0.123456

这就是我试图做的:

irb(main):001:0> rand = rand(1.000000..100.000000) 
=> 97.63428182481212 

但我显然不希望它是精确的,所以我决定做

irb(main):002:0> rand = rand(1.000000..100.000000).round(6) 
=> 12.944086 

但现在还有一个额外的步骤,看起来我应该能够以另一种方式做到这一点。我将不得不生成几百个数字,所以我不确定是否应该使用它,并使用.round()

+2

记住一个数字的呈现方式是相当随意的,在内部它总是会有比显示的更多的信息。所有浮点数都是用十进制表示的近似值。如果你需要六个地方,那么你需要像[BigDecimal](https://ruby-doc.org/stdlib-2.4.1/libdoc/bigdecimal/rdoc/BigDecimal.html)这样的定点方法。 – tadman

+1

四舍五入“几百个数字”应该相对较快。在我的机器上,一千个数字花费了1.5ms。所以,它可能足够满足您的需求。 –

+0

@tadman,是的,你是对的。我最终做了一个从整数到小数的移植,比例为6,最大精度为16。@ Jared Beck,是的,我不知道为什么我很担心。 – dsomel21

回答

1

这是怎么回事?

rand(1000000)/1000000.0 
#=> 0.071203 
相关问题