Я хотел бы удалить все конечные нули без усечения или округления числа, если его нет. Например, число может быть чем-то вроде 12.0
, и в этом случае нуль в конце следует удалить. Но число также может быть чем-то почти иррациональным, например, 12.9845927346958762...
выходит за край экрана. Есть ли способ настроить DecimalFormat или какой-либо другой класс для вырезания конечных нулей, сохраняя при этом иррациональность?
Удалить конечные нули из двойного
Ответы (3)
Если вы хотите перейти на BigDecimal
, есть #stripTrailingZeroes(), который выполняет это.
#toPlainString()
для вывода.
- person Keppil; 01.07.2012
Вы можете использовать манипуляции со строками, чтобы удалить конечные нули.
private static String removeTrailingZeros(double d) {
return String.valueOf(d).replaceAll("[0]*$", "").replaceAll(".$", "");
}
System.out.println(removeTrailingZeros(1234.23432400000));
System.out.println(removeTrailingZeros(12.0));
private static String removeTrailingZeros(double d) {
return String.valueOf(d).replaceAll("[0]*$", "").replaceAll(".$", "");
}< бр>
or
private static String removeTrailingZeros(double d) {
return String.valueOf(d).replaceAll(".?0*$", "");
}
Это неправильный код.
System.out.println(removeTrailingZeros(1234.23432400000));
вернуть: 1234.23432
но должен вернуть: 1234.234324
private static String removeTrailingZeros(double myDouble) {
return (new BigDecimal(Double.toString(myDouble))).toPlainString().replaceAll("[0]
*$", "").replaceAll(" .$", "");
Этот метод тоже работает неправильно
System.out.println(removeTrailingZeros(472.304000)); возвращает 472,30 вместо 472,304
System.out.println(removeTrailingZeros(472304000)); возвращает 47230 вместо 472304000
#stripTrailingZeroes() или toPlainString() для BigDecimal — хороший метод, но не единственный.
//----------------BigDecimal.toPlainString-------------
System.out.println( (новый BigDecimal(Double.toString(4724))).toPlainString());
System.out.println((new BigDecimal(Double.toString(472304000) ))).toPlainString());
возвращает:
4724.0 (это не нормально - мы не хотим '.0')
472304000 (это нормально)
//-------- --------BigDecimal.stripTrailingZeros-------------
System.out.println((new BigDecimal(Double.toString(4724< /strong>)).stripTrailingZeros()));
System.out.println((new BigDecimal(Double.toString(472304000d)).stripTrailingZeros()));
< br> возвращает:
4724.0 (это нормально)
4.72304E+8 (это не нормально — нам нужно 472304000 )
Идеальное разрешение текущей темы «Удалить завершающие нули из двойного» — использовать
.stripTrailingZeros().toPlainString()
Например:
//------ ---BigDecimal.stripTrailingZeros.toPlainString-----------------
System.out.println(new BigDecimal(Double.toString(472.304000< /strong>)).stripTrailingZeros().toPlainString());
System.out.println((new BigDecimal(Double.toString(4724)).stripTrailingZeros().toPlainString() ));
System.out.println((new BigDecimal(Double.toString(472304000d)).stripTrailingZeros().toPlainString()));
Результат:
472.304 (верно)
4724 (правильно)
472304000 (правильно)
0.###
сделает такую вещь. Конечно,double
- это всего лишь приближение чисел с плавающей запятой. Возможно, используйте BigDecimal, но это также окончательный класс. - person Joop Eggen   schedule 01.07.2012