Округление вдвое большего по сравнению с 5 десятичными разрядами в Java ME

C++ является названием языка программирования, который был утвержден комитетами по международным стандартам (ANSI/ISO).

VC ++ (C++ “Visual ”) является названием продукта компилятора C++ Microsoft и иногда, но не официально, IDE, это поставляется с (“Visual Studio”).

10
задан bharath 12 October 2011 в 07:42
поделиться

7 ответов

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

Допустим, округляемое значение представляет собой двойное с именем x :

double factor = 1e5; // = 1 * 10^5 = 100000.
double result = Math.round(x * factor) / factor;

Если вы хотите округлить до 6 знаков после запятой, пусть множитель будет 1e6 и т. Д.

14
ответ дан 3 December 2019 в 13:51
поделиться

Умножить на 100000. Добавить 0,5. Усечь до целого числа. Затем разделите на 100000.

Код:

double original = 17.77777777;
int factor = 100000;
int scaled_and_rounded = (int)(original * factor + 0.5);
double rounded = (double)scaled_and_rounded / factor;
8
ответ дан 3 December 2019 в 13:51
поделиться

Что бы вы ни делали, если вы получите значение double , оно вряд ли будет ровно 5 десятичных знаков. Бинарная арифметика с плавающей запятой работает не так. Лучшее, что вы сделаете, - это «двойное значение , ближайшее к исходному значению, округленное до 5 знаков после запятой». Если бы вы распечатали точное значение этого двойного числа, оно, вероятно, все равно будет иметь более 5 десятичных знаков.

Если вам действительно нужны точные десятичные значения, вы должны использовать BigDecimal .

10
ответ дан 3 December 2019 в 13:51
поделиться

Если вас устраивают внешние библиотеки, вы можете взглянуть на microfloat , в частности MicroDouble.toString (double d, int length) .

3
ответ дан 3 December 2019 в 13:51
поделиться

Попробуйте следующее

double value = Double.valueOf(String.format(Locale.US, "%1$.5f", 5.565858845));

System.out.println(value); // prints 5.56586

value = Double.valueOf(String.format(Locale.US, "%1$.5f", 5.56585258));

System.out.println(value); // prints 5.56585

Или, если вам нужно минимальное количество кода

, используйте статический импорт

import static java.lang.Double.valueOf;
import static java.util.Locale.US;
import static java.lang.String.format;

И

double value = valueOf(format(US, "%1$.5f", 5.56585258));

с уважением,

2
ответ дан 3 December 2019 в 13:51
поделиться
public static double roundNumber(double num, int dec) {
        return Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
}
1
ответ дан 3 December 2019 в 13:51
поделиться
DecimalFormat roundFormatter = new DecimalFormat("########0.00000");

public Double round(Double d)
    {
        return Double.parseDouble(roundFormatter.format(d));
    }
2
ответ дан 3 December 2019 в 13:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: