Как правильно отображать цену до двух десятичных знаков (центов), включая конечные нули в Java?
-
20-09-2019 - |
Вопрос
Есть хороший вопрос по округлению десятичных дробей в 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;
}