[
https://issues.apache.org/jira/browse/NUMBERS-217?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Alex Herbert resolved NUMBERS-217.
----------------------------------
Fix Version/s: 1.4
Resolution: Implemented
Added in commit:
f928a893d0aac6c9f0baaade9629df800005a187
> BigFraction to round using a MathContext
> ----------------------------------------
>
> Key: NUMBERS-217
> URL: https://issues.apache.org/jira/browse/NUMBERS-217
> Project: Commons Numbers
> Issue Type: New Feature
> Components: fraction
> Reporter: Alex Herbert
> Priority: Trivial
> Fix For: 1.4
>
>
> Allow rounding of a BigFraction to BigDecimal using a MathContext.
> Current rounding uses a scale passed to BigDecimal divide. This allows the
> number of digits after the decimal point to be specified. However this
> requires knowledge of the current decimal representation of the number to
> obtain a BigDecimal floating-point representation with a desired number of
> digits of precision.
> The MathContext allows the digits of precision to be set, rather than the
> number of digits after the decimal place:
> {code:java}
> // 1e-20
> BigFraction f = BigFraction.of(
> BigInteger.ONE,
> new BigInteger("100000000000000000000")
> );
> // 16 digits after the decimal place is not enough
> System.out.println(f.bigDecimalValue(16, RoundingMode.HALF_EVEN));
> // 16 digits of precision is OK
> System.out.println(f.bigDecimalValue(MathContext.DECIMAL64));
> // Smaller than 1e-20
> BigFraction f1 = BigFraction.of(
> BigInteger.ONE,
> new BigInteger("100000000000000000001")
> );
> System.out.println(f1.bigDecimalValue(MathContext.DECIMAL64));
> // More precision
> System.out.println(f1.bigDecimalValue(MathContext.DECIMAL128));
> // Not a representable double
> System.out.println(f1.bigDecimalValue(MathContext.DECIMAL128).doubleValue());{code}
> Prints:
> {noformat}
> 0E-10
> 1E-20
> 1.000000000000000E-20
> 9.999999999999999999900000000000000E-21
> 1.0E-20{noformat}
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)