в Java, как удалить все 0 в float? - PullRequest
5 голосов
/ 01 декабря 2011

Я бы хотел изменить число с плавающей точкой следующим образом:

10.5000 -> 10,5 10,0000 -> 10

Как удалить все нули после десятичной точки и изменить его на любое число с плавающей точкой(если есть не нули) или int (если были только нули)?

Заранее спасибо.

Ответы [ 8 ]

17 голосов
/ 02 декабря 2011

Хорошо, уловка в том, что сами плавающие и удваивающиеся значения не имеют конечных нулей как таковых;только то, как они печатаются (или инициализируются как литералы), может показывать их.Рассмотрим следующие примеры:

Float.toString(10.5000); // => "10.5"
Float.toString(10.0000); // => "10.0"

Вы можете использовать DecimalFormat, чтобы исправить пример «10.0»:

new java.text.DecimalFormat("#").format(10.0); // => "10"
13 голосов
/ 02 декабря 2011

Почему бы не попробовать регулярное выражение?

new Float(10.25000f).toString().replaceAll("\\.?0*$", "")
2 голосов
/ 02 декабря 2011

java.math.BigDecimal имеет метод stripTrailingZeros (), который достигнет того, что вы ищете.

BigDecimal myDecimal = new BigDecimal(myValue);
myDecimal.stripTrailingZeros();
myValue = myDecimal.floatValue();
2 голосов
/ 02 декабря 2011

Это обрабатывается двумя разными форматерами:

double d = 10.5F;
DecimalFormat formatter = new DecimalFormat("0");
DecimalFormat decimalFormatter = new DecimalFormat("0.0");
String s;
if (d % 1L > 0L) s = decimalFormatter.format(d);
else s = formatter.format(d);

System.out.println("s: " + s);
1 голос
/ 17 апреля 2018

Вам просто нужно использовать класс формата, как показано ниже:

new java.text.DecimalFormat("#.#").format(10.50000);
new java.text.DecimalFormat("#.#").format(10.00000);
1 голос
/ 02 декабря 2011

Отформатируйте ваши номера для вывода по мере необходимости.Вы не можете удалить внутренние значения "0".

0 голосов
/ 23 июля 2015

У меня была та же проблема, и я нашел обходной путь по следующей ссылке: StackOverFlow - Как красиво отформатировать плавающие числа в строку без ненужного десятичного числа 0

Ответ от JasonD был тот, за которым я следовал. Это не зависит от локали, что хорошо для моей проблемы и не имеет проблем с длинными значениями.

Надеюсь, эта помощь.

ДОБАВЛЕНИЕ СОДЕРЖИМОГО ИЗ ССЫЛКИ ВЫШЕ:

public static String fmt(double d) {
    if(d == (long) d)
        return String.format("%d",(long)d);
    else
        return String.format("%s",d);
    }

Производит:

232
0.18
1237875192
4.58
0
1.2345
0 голосов
/ 02 декабря 2011

Попробуйте использовать System.out.format

Вот ссылка, которая позволяет форматирование в стиле c http://docs.oracle.com/javase/tutorial/java/data/numberformat.html

...