[#104307] Float truncate — Eustáquio Rangel <eustaquiorangel@...>
Hi!
4 messages
2021/06/16
[ruby-core:104314] Re: Float truncate
From:
Austin Ziegler <halostatue@...>
Date:
2021-06-16 17:32:23 UTC
List:
ruby-core #104314
This isn窶冲 related to float truncation, it窶冱 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
<eustaquiorangel@gmail.com> 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: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
> <http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>
--
Austin Ziegler 窶「 halostatue@gmail.com 窶「 austin@halostatue.ca
http://www.halostatue.ca/ 窶「 http://twitter.com/halostatue
Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>