У меня есть некоторый код, который проверяет, сколько десятичных знаков имеет мое число.
Пример:
1,10 правильное преобразование: String.format("%.1f", Double.parseDouble(md.get("amount"))
1,10 неверное преобразование: String.format("%.2f", Double.parseDouble(md.get("amount"))
У меня не может быть трейлинг 0 's
1 правильное преобразование: String.format("%.0f", Double.parseDouble(md.get("amount"))
1 неправильное преобразование: String.format("%.1f", Double.parseDouble(md.get("amount"))
У меня не может быть трейлинг 0 *
Для чисел больше 1 000 000 Java преобразует мои числа в научную нотацию c, и единственный известный мне способ преобразовать их обратно без потери десятичных дробей - это использовать String.format.
Мой плохой код:
md - это карта, и ключ «сумма» отображается в строку, которая должна быть двойной
if( Double.parseDouble(md.get("amount")) * 10 % 10 != 0) {
System.out.println("0,1");
md.put("amount", String.format("%.1f", Double.parseDouble(md.get("amount"))));
if( Double.parseDouble(md.get("amount")) * 100 % 10 != 0) {
System.out.println("0,11");
md.put("amount", String.format("%.2f", Double.parseDouble(md.get("amount"))));
}
}
else if(Double.parseDouble(md.get("amount")) * 10 % 10 == 0 && Double.parseDouble(md.get("amount")) * 100 % 10 == 0){
System.out.println("0,0");
md.put("amount", String.format("%.0f", Double.parseDouble(md.get("amount"))));
}