Отображение удваивается с определенной точностью в Java - PullRequest
2 голосов
/ 06 апреля 2011

Я сейчас пишу приложение для калькулятора.Я знаю, что двойной не лучший выбор для хорошей математики.Большинство функций в приложении имеют большую точность, но те, которые не дают ужасных результатов.Мое решение состоит в том, чтобы показывать пользователям только 12 десятичных знаков точности.Я выбрал 12, потому что моя наименьшая точность исходит из моей числовой производной функции.

Проблема, с которой я сталкиваюсь, заключается в том, что если я умножу это на масштабирующее устройство, а затем округлю, то разделю на масштабирующее устройство, точность, скорее всего, будет выброшенасильный удар.Если я использую DecimalFormat, то нет способа показать только 12 и правильно отобразить букву E для научной нотации, но ее не будет, если это не нужно.

например, я хочу

1.23456789111213 to be 1.234567891112

но никогда

1.234567891112E0

но я также хочу

1.23456789111213E23 to be 1.234567891112E23

Так что в основном я хочу отформатировать строку числа в 12 знаков после запятой, сохраняя научную запись, ноне быть научным, когда это не должно

Ответы [ 4 ]

3 голосов
/ 06 апреля 2011

Использование String.format("%.12G", doubleVariable);

Именно так вы используете format () для отображения значений в научной нотации, но без научной нотации, если не нужно. Единственное предостережение в том, что вы в конечном итоге получаете «+» после «E», так что ваш будет заканчиваться как 1.234567891112E + 23

1 голос
/ 06 апреля 2011

Я думаю, вы ищете класс BigDecimal.Вы можете использовать метод toEngineeringString (), чтобы получить научную запись.Также см. этот ответ .Вы также можете установить точность BigDecimal, указав MathContext в его конструкторе, или масштаб, используя один из методов setScale ().

0 голосов
/ 06 апреля 2011

Вас заинтересует BigDecimal, например:

BigDecimal number = new BigDecimal("1.23456789111213");
number = number.setScale(12, RoundingMode.HALF_UP);
System.out.println(number);

Выберите подходящий вам RoundingMode.

0 голосов
/ 06 апреля 2011
String.format("%.12d", doubleVariable);

Должен дать вам то, что вы ищете в вашем первом деле. Извините, но я не знаю, как определить, когда показывается ваше электронное уведомление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...