компактное поведение форматирования чисел в Java (автоматическое переключение между десятичной и научной нотацией) - PullRequest
5 голосов
/ 13 ноября 2011

Я ищу способ динамического форматирования числа с плавающей запятой в стандартном десятичном формате или в научной нотации, в зависимости от значения числа.

  • Для умеренных величин число должно бытьотформатирован как десятичная дробь с подавленными конечными нулями.Если число с плавающей запятой равно целочисленному значению, десятичная точка также должна быть подавлена.
  • Для экстремальных величин (очень малых или очень больших) это число должно быть выражено в научных обозначениях.С другой стороны, если число символов в выражении в виде стандартной десятичной записи превышает определенный порог, переключитесь на научную запись.
  • У меня должен быть контроль над максимальным количеством цифр точности,но я не хочу, чтобы конечные нули добавлялись для выражения точности минимум ;все конечные нули должны быть подавлены.

По существу, он должен оптимизироваться для компактности и читабельности .

2.80000 -> 2.8

765.000000 -> 765

0.0073943162953 -> 0.00739432 (ограничить цифры точности - в данном случае до 6)

0.0000073943162953 -> 7.39432E-6(переключитесь на научное обозначение, если величина достаточно мала - в данном случае меньше 1E-5)

7394316295300000 -> 7.39432E+6 (переключитесь на научное обозначение, если значение достаточно велико - например,когда больше чем 1E+10)

0.0000073900000000 -> 7.39E-6 (убрать нули с нуля по значению в научной записи)

0.000007299998344 -> 7.3E-6 (округление от 6-digit предел точности заставляет это число иметь конечные нули, которые убираются)


Вот что я нашел до сих пор:

  • Метод .toString() числакласс делает большую часть того, что я хочу, за исключением того, что он не преобразуется в целочисленное представление, когда это возможно, и он не будет выражать большие целочисленные значения.отношения в научной нотации.Кроме того, я не уверен, как отрегулировать точность.
  • Строка формата "%G" для функции String.format(...) позволяет мне выражать числа в научной записи с регулируемой точностью, но не обрезаетконечные нули .

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

1 Ответ

1 голос
/ 13 ноября 2011

Вы уже просмотрели DecimalFormat ?

(что также может представлять интерес: BigDecimal # toString () )

...