2016-07-16 7 views
0

Ruby 2.3.0p0を使用しています。Ruby浮動小数点加算エラー

私は望ましい結果が 16.49代わりの 16.490000000000002

私はなるように私はこれを固定できるか
a = 1.5 
b = 14.99 
c = a + b 

でなければなりません

irb(main):001:0> 1.50 + 14.99 
=> 16.490000000000002 

ルビーで2つのフロート番号を使用して単純な足し算をやろうとしてきた

変数cに16.49を得ることができる

乾杯。

+1

[すべてのコンピュータ科学者が浮動小数点演算について知っておくべきこと](http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html) –

+0

私はそれを解決していると思いますエレガントではないかもしれない方法。 'bigdecimal'が必要です。 (BigDecimal( '1.5')+ BigDecimal('14 .99 '))。to_f。乾杯。 –

答えて

2

浮動小数点数は、あなたは彼らがいると思うほど正確ではありませんので、彼らはしばしば、様々な計算から生じるノイズの小さなビットを含む、それはそれらを表示するときに、あなたが望む精度のレベルを指定するためにあなたの責任です:

a = 1.5 
b = 14.99 

c = a + b 

puts '%.2f' % c 

%.2fここでは、2桁の表記を意味します。 %.9fは9か所になります。

浮動小数点数の仕組みです。それらがきちんと整然としているとは思わないでください。