Как вывести число с плавающей точкой с заданным количеством знаков?
Эх, как все было просто в паскале: (chislo:a:b) 
Вывод чисел с плавающей точкой
Сообщений 1 страница 4 из 4
Поделиться12007-11-08 11:34:03
Поделиться22007-11-08 18:58:21
Для форматирования чисел в яве существут абстрактный класс java.text.NumberFormat
Для получения экземпляра этого класса нужно вызвать у него статический метод getInstance(), в который параметром передать используемую локаль (числа по разному в разных языках пишутся - например в русском дробная часть через запятую, а в английском через точку). Чтобы задать локаль нужно воспользоваться классом java.lang.Locale, у которого есть куча статических переменных, обозначающих локали. Нам подходит Locale.ENGLISH или Locale.US То есть нужно написать что-то вроде
NumberFormat nf = NumberFormat.getInstance(Locale.US);
После этого у этого nf можно вызывать всякие полезные методы. В частности:
nf.setGroupingUsed(boolean newValue); использовать/не использовать группировку по разрядам. По умолчанию это значение установлено в true, поэтому число миллион будет выглядеть вот так "1.000.000" - каждые три циферки через точку, поэтому если не хотим получить presentationError, то обязательно вызываем этот метод и отдаем ему false.
nf.setMaximumFractionDigits(int newValue); устанавливает максимальное число знаков, выводимых после запятой.
nf.setMinimumFractionDigits(int newValue); устанавливает минимальное число знаков, выводимых после запятой.
nf.format(double/long number); возвращает строку с отформатированным числом.
Поделиться32007-11-08 20:37:31
Т.е. для того, чтобы выводить всегда, скажем 3 знака нужно установить минимальное и максимальное значение 3?
А чем этот способ лучше или хуже:
double a=1.01001;
system.out.println(Math.round(a*100)/100.0);
Поделиться42007-11-09 18:11:15
Да, тогда 3 знака после запятой будет.
Math.round() отдает long. В double может лежать например какое-нибудь 1. 7е+308, оно не влезет в long.