защо изходът е в научна нотация?

Защо изходът на следния код е в научна нотация?

      BigDecimal val = new BigDecimal("0000.000000111");
      System.out.println(val);

изход: 1.11e-8

но изходът на този код е правилен в десетичен формат.

      BigDecimal val = new BigDecimal("0000.000011111");
      System.out.println(val);

изход: 0.000011111

Има ли начин да получите правилна десетична стойност за първия низ (като втори изход)?


person coming out of void    schedule 20.05.2015    source източник
comment
Прочетохте ли документацията за BigDecimal.toString?   -  person Jon Skeet    schedule 20.05.2015
comment
Използвайте toPlainString(), за да видите BigDecimal представяне без експонента   -  person MaxZoom    schedule 20.05.2015


Отговори (2)


Ако погледнете функцията toString() на BigDecimal, той обяснява как се създава изходът:

След това се изчислява коригиран показател; това е отречената скала плюс броя знаци в преобразуваната немащабирана стойност, минус един. Тоест -scale+(ulength-1), където ulength е дължината на абсолютната стойност на немащабираната стойност в десетични цифри (нейната точност).

Ако скалата е по-голяма или равна на нула и коригираният показател е по-голям или равен на -6, числото ще бъде преобразувано в символна форма без използване на експоненциална нотация. В този случай, ако скалата е нула, тогава не се добавя десетична запетая и ако скалата е положителна, десетичната запетая ще бъде вмъкната със скалата, указваща броя знаци вдясно от десетичната запетая.

Ако искате изхода без нотацията e10, използвайте toPlainString().

person serv-inc    schedule 20.05.2015

използвайте метода toPlainString

BigDecimal val = new BigDecimal("0000.000011111");
          System.out.println(val.toPlainString());
person miracle_the_V    schedule 20.05.2015