2017-08-16 5 views
0

私は基本的に小数点の後に第6の場所に正確なフロートが欲しいです。Rubyの特定の10進数値にフロートを生成する効率的な方法はありますか?

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 

を行うことを決めた。しかし:

何か0.123456

のようにこれは私がしようとしたものです私は別のやり方をすることができるはずです。私は数百の数字を生成しなければならないので、私はそれをネジ止めすればいいのか分かりません。.round()を使用してください。

+2

数値がレンダリングされる方法は、むしろ任意であり、内部的には、表示される情報よりも多くの情報が常に記憶されます。すべての浮動小数点数は10進数で表されるときの近似値です。 6つの場所が正確に必要な場合は、[BigDecimal](https://ruby-doc.org/stdlib-2.4.1/libdoc/bigdecimal/rdoc/BigDecimal.html)のような固定小数点メソッドが必要です。 – tadman

+1

「数百の数字」の丸めは比較的速くなければなりません。私のマシンでは、1000個の数値を丸めるのに1.5ミリ秒かかりました。だから、おそらくあなたのニーズに十分に速いでしょう。 –

+0

@tadman、うん、あなたは正しいです。私は、整数から小数点まで、6のスケールと最大精度16で終了しました。@ Jared Beck、ええ、なぜ私は心配していたのか分かりません。 – dsomel21

答えて

1

これはどうですか?

rand(1000000)/1000000.0 
#=> 0.071203 
関連する問題