Например:
double amount = 9.090909090909097E-4;
amount = getRoundedNumber(amount, 4);
public static double getRoundedNumber(double number, int places) {
double multiplier = Math.pow(10, places);
return (double) Math.round(number * multiplier) / multiplier;
}
результат: 9.0E-4
Мне нужно, чтобы это были обычные числа, потому что я отправляю их в нашу базу данных (бэкэнд) в формате json:
"amount":9.0E-4
как сделать 0.0009?
@DawoodibnKareem Обновил вопрос, извините, я забыл упомянуть, что отправляю детали в нашу базу данных в формате json.
Возможны дубликаты! stackoverflow.com/questions/13064567/….
Любая библиотека формата JSON должна правильно анализировать это число. Что бы вы ни делали, не пытайтесь самостоятельно форматировать или анализировать JSON. Все эти мелкие проблемы с JSON уже решены людьми, которые делают эти библиотеки.
Возможный дубликат: Округлить число до n знаков после запятой.
Это с использованием класса Формат номераhttps://docs.oracle.com/javase/8/docs/api/java/text/NumberFormat.html
вывод: 0,00091
import java.util.*;
import java.text.*;
public class Main {
public static void main(String[] args) {
double amount = 9.090909090909097E-4;
NumberFormat formatter = new DecimalFormat("###.#####");
String amountStr = formatter.format(amount);
System.out.println(amountStr);
}
}
Ссылка:
Научное обозначение является допустимым представлением чисел с плавающей запятой («действительных»). Кроме того, числа JSON позволяет должны быть представлены в экспоненциальном представлении; см. диаграммы синтаксиса JSON на json.org.
Нет необходимости округлять число или преобразовывать, чтобы не использовать экспоненциальное представление... чтобы сделать его приемлемым в формате JSON.
Если вы создаете JSON, используя одну из многих библиотек парсера / депарсера Java JSON, они позаботятся о форматировании.
Если вы форматируете JSON вручную, то Double.toString(double)
создаст приемлемый рендеринг для вашего JSON.
Если вы настаиваете на отказе от научных обозначений, есть множество способов сделать это. Простой способ String.format("%f", value)
. Другие описаны в Как напечатать двойное значение без научной нотации с помощью Java?.
Однако остерегайтесь округления. Строка 0.0009
НЕ является допустимым представлением 9.090909090909097E-4
. Вы отбросили примерно 13 десятичных цифр точности. Первое отличается от второго почти на 10%.
Короче говоря, хотя 0.0009
выглядит красиво, математически это очень, очень неправильно.
Это является в реальных числах. Ваша база данных прекрасно справится, если вы передадите ее как
double
.