Котлин. Как отформатировать десятичное число с нулем в конце?

#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 знака после запятой, а когда нет, и выбрать подходящий формат для использования в каждом конкретном случае.