2012-10-10 3 views
0

Я хочу, чтобы установить минимальное количество знаков после запятой нижеФракции с setMinimumFractionDigits Java

double a = 1d/3; 
NumberFormat nf = NumberFormat.getInstance(); 
nf.setMinimumFractionDigits(30); 
System.out.println(nf.format(a)); 

Но это дает результат, как

0.333333333333333300000000000000 

Как я могу преодолеть это?

+3

Точность 'double' ограничена примерно шестью десятичными цифрами. Не имеет большого смысла пытаться напечатать 30 цифр из 'double'. Используйте «BigDecimal», если вам нужны неограниченные числа с плавающей запятой. – Jesper

+1

@ Jesper .. Я думаю, вы должны опубликовать его в качестве ответа, чтобы OP мог его принять. –

ответ

1

попробовать что-то вроде этого:

BigDecimal b1 = new BigDecimal(1); 
    BigDecimal b2 = new BigDecimal(3); 
    System.out.println(b1.divide(b2, 30, BigDecimal.ROUND_UP)); 
+0

Большое спасибо. Это решает мою проблему. –

1

Точность типа double ограничен примерно 16 десятичных цифр (см: Double-precision floating-point format). Таким образом, не имеет большого смысла печатать 30 цифр от double.

Используйте BigDecimal, если вам нужны неограниченные числа с плавающей запятой.

Смежные вопросы