2013-05-21 4 views
1

Я использую BigDecimal для подсчета некоторого большого реального числа. Хотя я попробовал два метода: BigDecimal.toString() или BigDecimal.stripTrailingZeros().toString(), это все еще не sasitfy мое требование.Java BigDecimal: как форматировать BigDecimal

Например, если я использую stripTrailingZeros: 4.3000 становится 4.3 но 4.0 становится 4.0 не 4. Оба вышеуказанных метода не могут привести к такому состоянию. Итак, мой вопрос: как это сделать в java?

Спасибо :)

ответ

3

Вы можете использовать DecimalFormat следующим образом:

BigDecimal a = new BigDecimal("4.3000"); 
BigDecimal b = new BigDecimal("4.0"); 

DecimalFormat f = new DecimalFormat("#.#"); 
f.setDecimalSeparatorAlwaysShown(false) 
f.setMaximumFractionDigits(340); 

System.out.println(f.format(a)); 
System.out.println(f.format(b)); 

который печатает

4.3 
4 

Как Bhashit отметил, номер по умолчанию дробных цифр 3, но мы может установить его максимум в 340. Я действительно не знал об этом поведении DecimalFormat. Это означает, что если вам нужно более 340 дробных цифр, вам, вероятно, придется манипулировать string, указанным toString().

3

Посмотрите на класс DecimalFormat. Я думаю, что вы хотите что-то вроде

DecimalFormat df = new DecimalFormat(); 
// By default, there will a locale specific thousands grouping. 
// Remove the statement if you want thousands grouping. 
// That is, for a number 12345, it is printed as 12,345 on my machine 
// if I remove the following line. 
df.setGroupingUsed(false); 
// default is 3. Set whatever you think is good enough for you. 340 is max possible. 
df.setMaximumFractionDigits(340); 
df.setDecimalSeparatorAlwaysShown(false); 
BigDecimal bd = new BigDecimal("1234.5678900000"); 
System.out.println(df.format(bd)); 
bd = new BigDecimal("1234.00"); 
System.out.println(df.format(bd)); 

Output: 
1234.56789 
1234 

Вы также можете использовать RoundingMode по вашему выбору. Контролируйте количество десятичных точек, которое должно отображаться, используя шаблон, предоставленный конструктору DecimalFormat. Дополнительную информацию о форматировании см. В документации DecimalFormat.

+0

Я не уверен, что это поведение, которое он или она ищет. Я думаю, они ищут, чтобы просто удалить все завершающие нули. – Zong

+0

Обновлен ответ. Спасибо за комментарий. Я неправильно прочитал вопрос. –