Beginner
Beginner

Reputation: 1424

get double value from bigdecimal without exponential java

is there a way to get double from BigDecimal without exponential?

Eg: I have an new BigDecimal("123456797676.897")

if i print new BigDecimal("123456797676.897").toString() it prints properly as 123456797676.897.

Now suppose if I try to print new BigDecimal("123456797676.897").doubleValue(), it prints with exponential like 1.23456797676897E11.

Is there any way I can get doublevalue with out exponential.

Thanks :)

Upvotes: 1

Views: 2329

Answers (1)

Patricia Shanahan
Patricia Shanahan

Reputation: 26185

The following program demonstrates that these are all exactly the same double:

new BigDecimal("123456797676.897").doubleValue()
123456797676.897
1.23456797676897E11
12.3456797676897E10

The Double toString method has to pick one representation for each value. For numbers greater than 107 it uses exponential notation with a single digit before the decimal point. That is a generally reasonable choice, but it is not always the right choice. If you want it displayed without the exponent use DecimalFormat. If you are just using the number, it makes no difference whether Double's toString would have displayed it with an exponent or not, and you don't need to do anything about it.

import java.math.BigDecimal;

public class Test {
  public static void main(String[] args) {
    double doubleValue = new BigDecimal("123456797676.897").doubleValue();
    double simpleLiteral = 123456797676.897;
    double exponent11Literal = 1.23456797676897E11;
    double exponent10Literal = 12.3456797676897E10;

    System.out.println(doubleValue == simpleLiteral);
    System.out.println(doubleValue == exponent11Literal);
    System.out.println(doubleValue == exponent10Literal);
  }
}

output:

true
true
true

Upvotes: 2

Related Questions