From: "中田 隆雄" Date: 2011-09-30T13:53:41+09:00 Subject: [ruby-list:48427] Re: 切り捨てについて教えてください 中田です ご教授ありがとうございます。 BigDecimal を勉強してみます。 奥が深そうですね。 On 2011/09/29, at 11:46, Tetsuya Imamura wrote: > こんにちは、今村です。 > > 標準添付ライブラリ BigDecimal を使うという方法もあります。 > > > require 'bigdecimal' > > (1300 * (BigDecimal("0.7"))) #=> # > (1300 * (BigDecimal("0.7"))).floor # => 910 > (1300 * (BigDecimal("0.7"))).truncate # => 910 > > > > _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ > _/ 今村哲也 Tetsuya Imamura > _/ Office: mail@tetsuyai.com (mailto:mail@tetsuyai.com) > _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ > > 日付:2011年9月29日木曜日、時刻:10:18、差出人:中田 隆雄: > >> 中田です。 >> 早速、ご教授ありがとうございます。 >> >> 運用上は >> >> (1300 * (0.7 * 100) / 100) #=> 910.0 >> (1300 * (0.7 * 100) / 100).floor #=> 910 >> (1300 * (0.7 * 100) / 100).truncate #=> 910 >> >> とすれで良いのでしょうか? >> >> 運用上のプログラミングや注意点等を >> ご教授頂けないでしょうか? >> >> >> >> On 2011/09/29, at 4:12, U.Nakamura wrote: >> >>> こんにちは、なかむら(う)です。 >>> >>> In message "[ruby-list:48421] 切り捨てについて教えてください" >>> on Sep.29,2011 03:37:29, wrote: >>>> この違いはなぜでしょうか? 教えてください >>> >>> 目に見えているものが必ず正しいわけでもありません。 >>> >>> 一般に、コンピュータの浮動小数点数演算は2進数で行われるため、 >>> 我々が扱いたがる10進数で同じ値を考えた場合、割り切れるかどう >>> かが異なるケースがあります。 >>> そのため、10進数で考えた場合に当然予測される値と、実際にコン >>> ピュータが計算した結果とが微妙に異なる値となることがあります。 >>> >>> 私のコンピュータの場合、1300*0.7の値は具体的には >>> 909.9999999999998863131622783839702606201171875 >>> になります。 >>> よって、小数点以下の切捨てを行うと909になります。 >>> >>> >>> それでは。 >>> -- >>> U.Nakamura >> >> ==================== >> 中田 隆雄 >> acnakada@tam.ne.jp (mailto:acnakada@tam.ne.jp) >> ==================== > =================================== 株式会社アチーブメント・コンサルティング 中田 隆雄 nakada@achieve.co.jp ===================================