Comments (2)
- It happens only when precision is 0 (defailt), it works well when we define a non-zero precision:
> BigDecimal.mode(BigDecimal::EXCEPTION_INFINITY, false); BigDecimal::INFINITY.round(1)
# => Infinity
- With precision=0,
#round
converts a decimal to an integer and it's according to the docs
If n is specified and negative, at least that many digits to the left of the decimal point will be 0 in the result, and return value will be an Integer.
https://ruby-doc.org/stdlib-3.0.3/libdoc/bigdecimal/rdoc/BigDecimal.html#method-i-round
- For the source-divers, the error is raised here:
bigdecimal/ext/bigdecimal/bigdecimal.c
Lines 2316 to 2318 in 1cb0950
becauseBigDecimal_to_i
calls withalways=1
:bigdecimal/ext/bigdecimal/bigdecimal.c
Line 1062 in 1cb0950
and it means that the error for infinity is raised always, no matter whatmode
is set.
I believe it's an expected behaviour. All we could do is add a small note in the docs to be more explicit. WDYT @mrkn ?
from bigdecimal.
Same happens for NaN
, looks like another side effect of the same case:
irb(main):029:0> BigDecimal('NaN').round(1)
=> NaN
irb(main):031:0> BigDecimal('NaN').round(0)
(irb):31:in `round`: Computation results to 'NaN'(Not a Number) (FloatDomainError)
irb(main):032:0> BigDecimal('NaN').round(-1)
(irb):32:in `round`: Computation results to 'NaN'(Not a Number) (FloatDomainError)
from bigdecimal.
Related Issues (20)
- ERROR(VpDivd): space for remainder too small
- Comparison failure: 9.8.abs <= BigDecimal('9.8') => false HOT 4
- Inconsistent max precision affecting dump&load result HOT 4
- Inconsistency between Bigdecimal 3.0.x and 3.1.x HOT 4
- BigDecimal#n_significant_digits and #precision do not return the correct value HOT 1
- I would expect BigDecimal#divmod to return type [Int, BigDecimal] (like Integer#divmod, Float#divmod)
- mode(BigDecimal::EXCEPTION_ALL,true) did not throw an exception when bigdecimal#exponent overflowed HOT 1
- Integrate JRuby implementation into the gem
- Loss of precision on very large numbers in `to_d` HOT 1
- Incorrect calculation result after upgrading from BigDecimal 3.1.1 to 3.1.2 HOT 1
- Difference in behavior with and without BigDecimal#dev 'digit' argument
- nil.to_d inconsistent (bigdecimal/util)
- Installation Error of BigDecimal 3.1.5 in JRuby HOT 3
- ruby 3.0.6 compilation error on MacOS Sonoma 14 related to maybe_unused HOT 1
- Ruby 3.4 and BigDecimal. HOT 7
- Memory leak with BigDecimal::EXCEPTION_OVERFLOW HOT 2
- BigDecimal#whole? HOT 3
- Use RUBY_TYPED_EMBEDDABLE in BigDecimal
- Please publish 3.1.8-java gem HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from bigdecimal.