Как округлить значение экспоненциальной записи (двойное), чтобы стать обычным числом

Например:

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?

Это является в реальных числах. Ваша база данных прекрасно справится, если вы передадите ее как double.

Dawood ibn Kareem 17.05.2022 05:57

@DawoodibnKareem Обновил вопрос, извините, я забыл упомянуть, что отправляю детали в нашу базу данных в формате json.

NicoTing 17.05.2022 06:02

Возможны дубликаты! stackoverflow.com/questions/13064567/….

Mohamad Ghaith Alzin 17.05.2022 06:16

Любая библиотека формата JSON должна правильно анализировать это число. Что бы вы ни делали, не пытайтесь самостоятельно форматировать или анализировать JSON. Все эти мелкие проблемы с JSON уже решены людьми, которые делают эти библиотеки.

Dawood ibn Kareem 17.05.2022 06:18

Возможный дубликат: Округлить число до n знаков после запятой.

user207421 17.05.2022 06:39
Основы программирования на Java
Основы программирования на Java
Java - это высокоуровневый объектно-ориентированный язык программирования, основанный на классах.
Концепции JavaScript, которые вы должны знать как JS программист!
Концепции JavaScript, которые вы должны знать как JS программист!
JavaScript (Js) - это язык программирования, объединяющий HTML и CSS с одной из основных технологий Всемирной паутины. Более 97% веб-сайтов используют...
3
5
52
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Это с использованием класса Формат номера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);
    }
}

Ссылка:

https://stackoverflow.com/questions/13064567/java-beginner-converting-scientific-notation-to-decimal#:~:text=You%20can%20do%20it%20like,setMinimumFractionDigits(7)%3B%20System

Ответ принят как подходящий

Научное обозначение является допустимым представлением чисел с плавающей запятой («действительных»). Кроме того, числа 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 выглядит красиво, математически это очень, очень неправильно.

Другие вопросы по теме