#java #kotlin #integer #double #decimalformat
#Ява #котлин #целое число #двойной #десятичный формат
Вопрос:
Мне нужно отформатировать номер.
Мне нужен следующий результат:
3434 -gt; 3 434 3434.34 -gt; 3 434.34 3434.3 -gt; 3 434.30
Вот мой код:
val formatter = DecimalFormat("#,###,##0.##") return formatter.format(value)
Но я получаю такой результат:
3434 -gt; 3 434 3434.34 -gt; 3 434.34 3434.3 -gt; 3 434.3 // wrong!! expected 3 434.30
Мне нужно добавить ноль в конце, если после десятичной точки стоит одна цифра.
Пожалуйста, помогите мне, как я могу решить эту проблему?
Комментарии:
1. Взгляните на мой ответ. Я получаю нужные вам результаты, используя некоторую логику IF и манипуляции со строками.
2. Подсказка: DecimalFormat-это класс java. Это не имеет никакого отношения к котлину. И этот класс существует с тех пор, как никогда. Все, о чем вы только можете мечтать, спрашивайте об этом … меня уже спрашивали здесь раньше. Много раз. В следующий раз проведите небольшое исследование.
Ответ №1:
Пример:
import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.util.*; public class AddZeroToOneDigitDecimal{ public static void main(String []args){ System.out.println(customFormat(3434)); System.out.println("----------"); System.out.println(customFormat(3434.34)); System.out.println("----------"); System.out.println(customFormat(3434.3)); } public static String customFormat(double d){ String result = formatter.format(d); return (result.replace(".00","")); } private static DecimalFormat formatter; private static final String DECIMAL_FORMAT = "#,###,##0.00"; private static DecimalFormatSymbols formatSymbols = new DecimalFormatSymbols(Locale.ENGLISH); static { formatSymbols.setDecimalSeparator('.'); formatSymbols.setGroupingSeparator(' '); formatter = new DecimalFormat(DECIMAL_FORMAT, formatSymbols); } }
Упрощенный
val formatter = DecimalFormat("#,###,##0.00"); return formatter.format(value).replace(".00","");
Ответ №2:
Удалите последние два #
после .
и добавьте 00
вместо ##
них .
val dec = DecimalFormat("#,###,##0.00")
Комментарии:
1. В этом случае за сумму 4 000, я получу 4 000.00, но ожидается 4 000
2. @testivanivan Это другой формат. Вам нужно будет решить, как определить, когда вам нужно 2 знака после запятой, а когда нет, и выбрать подходящий формат для использования в каждом конкретном случае.