From: Austin Ziegler Date: 2021-06-16T13:32:23-04:00 Subject: [ruby-core:104314] Re: Float truncate This isn���t related to float truncation, it���s related to the approximate nature of float. [4] pry(main)> 291.4 * 100 => 29139.999999999996 https://bugs.ruby-lang.org/#Floating-point-numbers If your client needs accuracy on this, they should be using BigDecimal. [12] pry(main)> BigDecimal('291.4').truncate(2) => 0.2914e3 As a side note to the maintainers of the RubyMine gateway, this email did not open a ticket in RubyMine. Is the gateway broken again? -a On Wed, Jun 16, 2021 at 8:25 AM Eust��quio Rangel wrote: > > Hi! > > A customer just noticed a weird behaviour on its app, regarding float truncate. I know floats are wild beasts and we can have some surprises as stated on the truncate docs as > > (0.3 / 0.1).truncate > => 2 > > But let me show what they found: > > > 291.1.truncate(2) > => 291.1 > > 291.2.truncate(2) > => 291.2 > > 291.3.truncate(2) > => 291.3 > > 291.4.truncate(2) > => 291.39 <------------------ here! > > 291.5.truncate(2) > => 291.5 > > Notice 291.4 truncating to 2, returns 291.39! They have another number like .3 that truncates to .2, so I just took a look on rb_float_floor and found that 291.4 is converted to 29139.000000 after powered and sent to > > floor(number * f) > > and then proceeds to DBL2NUM when it returns 291.39. I advised them to use another approach other than truncate (round don't work for them because of the ceil/floor operation) but I'm curious if it is a known behaviour of float truncate. > > Thanks. > > > Unsubscribe: > -- Austin Ziegler ��� halostatue@gmail.com ��� austin@halostatue.ca http://www.halostatue.ca/ ��� http://twitter.com/halostatue Unsubscribe: