Project

General

Profile

Bug #4394

Bug in floating point multiplication

Added by philomath (Stefan Lembach) about 9 years ago. Updated 7 months ago.

Status:
Rejected
Priority:
Normal
Assignee:
-
Target version:
ruby -v:
ruby 1.9.2p136 (2010-12-25 revision 30365) [x86_64-linux]
Backport:
[ruby-core:35222]

Description

=begin
I stumbled upon the following odd rounding error in Float multiplication while using irb to calculate the tip for the pizza service ;-):

12.4 * 1.05 yields 13.020000000000001, but should be 13.02
=end


Related issues

Related to Ruby master - Bug #3746: Incorrect Float subtractionRejected08/26/2010Actions
#1

Updated by jballanc (Joshua Ballanco) about 9 years ago

This is how floating point math works. See here for more info: http://en.wikipedia.org/wiki/Floating_point#Representable_numbers.2C_conversion_and_rounding

If you want exact decimal math, try:

ruby-1.9.2-p136 :001 > require 'bigdecimal'
 => true 
ruby-1.9.2-p136 :002 > (BigDecimal('12.4') * BigDecimal('1.05')).to_f
 => 13.02 
#2

Updated by naruse (Yui NARUSE) about 9 years ago

  • Status changed from Open to Rejected
#3

Updated by rogerdpack (Roger Pack) about 9 years ago

You can also do

(12.4 * 1.05).round(2)
=> 13.02

Also available in: Atom PDF