Как правильно отображать цену до двух десятичных знаков (центов), включая конечные нули в Java?

StackOverflow https://stackoverflow.com/questions/1734282

Вопрос

Есть хороший вопрос по округлению десятичных дробей в Java. здесь.Но мне было интересно, как я могу включить конечные нули для отображения цен в моей программе, например:1,50 доллара США, 1,00 доллара США

Простое решение

String.format("%.2g%n", 0.912385);

работает нормально, но опускает конечный ноль, если он находится в последнем десятичном знаке.Проблема возникает в моей программе, хотя я использую только такие выражения:

double price = 1.50;

Когда я выполняю расчеты с разными ценами (складываю, умножаю и т. д.), результат в основном отображается следующим образом:

$2.5000000000000003

Итак, использование String.format отлично подходит для этой цели, но оно усекает приведенный выше пример до

$2.5

Есть ли правильный способ показать конечный ноль во втором десятичном знаке?Или оба нуля, если результат расчета должен быть

$2.00
Это было полезно?

Решение

Я бы порекомендовал вам сделать это:

NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
double price = 2.50000000000003;
System.out.println(currencyFormatter.format(price));

Это также имеет то преимущество, что оно зависит от локали.Это сработает, например, если вы находитесь в зоне евро, а не в США.

Другие советы

Хотя другие ответы совершенно верны (особенно ответ Даффимо), у вас гораздо более серьезная проблема, чем форматирование дисплея.На самом деле вы используете полностью неправильный введите денежную сумму, которая является дискретный ценить.Вместо double, вам действительно следует рассмотреть возможность использования java.lang.BigDecimal.

(РЕДАКТИРОВАТЬ:...или хорошо реализованный класс Money, как указал Даффимо в комментарии, например классы из JScience денежный модуль или более поздний Джода-Деньги - которая еще не выпущена в качестве официальной версии.)

Вероятно, это можно сделать с помощью String.format(...), но вы можете использовать DecimalFormat:

double price = 2.50000000000003;
DecimalFormat formatter = new DecimalFormat("$0.00");
System.out.println(formatter.format(price)); // print: $2.50

Попытался ли ты:

String s = String.format("$%.2f", 2.50);

Это поможет.

public static String getFormattedData(String actualString) 
    {
        String subString = "0.0";

        if(actualString.contains("."))
        {   
            subString = actualString.substring(actualString.indexOf("."), actualString.trim().length()); 

            if(Double.parseDouble(subString) > 0.0)
                return actualString;
            else
                actualString = actualString.substring(0, actualString.indexOf("."));
        }
        return actualString;
    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top