Как сохранить десятичное число в Java

Наличие следующего кода в Java:

double operation = 890 / 1440;  
System.out.println(operation);  

Результат: 0.0

То, что я хочу, должно сохранить первые 4 десятичных цифры этой операции (0.6180). Вы знаете, как я могу сделать это?

6
задан Bob 5 November 2015 в 15:28
поделиться

7 ответов

Инициализируйте вашу переменную с помощью выражения, которое принимает значение типа double, а не int:

double operation = 890.0 / 1440.0;

В противном случае выражение выполняется с использованием целочисленной арифметики (что приводит к усечению результата). Этот усеченный результат затем преобразуется в double .

17
ответ дан 8 December 2019 в 02:17
поделиться

Вы можете использовать двойной литерал d - в противном случае ваши числа считаются типом int:

double operation = 890d / 1440d;

Затем вы можете использовать NumberFormat для указания количества цифр.

Например:

NumberFormat format = new DecimalFormat("#.####");
System.out.println(format.format(operation));
11
ответ дан 8 December 2019 в 02:17
поделиться

Вы также можете сделать что-то вроде этого:

double result = (double) 890 / 1400;

, который напечатает следующее:

0.6180555555555556

Вы можете проверить, как округлить число здесь

6
ответ дан 8 December 2019 в 02:17
поделиться

Это сделано с помощью BigDecimal

   import java.math.BigDecimal;
import java.math.RoundingMode;


    public class DecimalTest {

        /**
         * @param args
         */
        public static void main(String[] args) {
            double operation = 890.0 / 1440.0;
            BigDecimal big = new BigDecimal(operation);     
            big = big.setScale(4, RoundingMode.HALF_UP);        
            double d2 = big.doubleValue();
            System.out.println(String.format("operation : %s", operation));
            System.out.println(String.format("scaled : %s", d2));
        }
    }

Output

операция : 0.61805555555556 масштабирование : 0.6181

4
ответ дан 8 December 2019 в 02:17
поделиться

BigDecimal, хотя и очень неуклюжий в работе, дает некоторые возможности форматирования:

    BigDecimal first = new BigDecimal(890);
    BigDecimal second = new BigDecimal(1440);
    System.out.println(first.divide(second, new MathContext(4, RoundingMode.HALF_EVEN)));
2
ответ дан 8 December 2019 в 02:17
поделиться
double operation = 890.0 / 1440;
System.out.printf(".4f\n", operation);
1
ответ дан 8 December 2019 в 02:17
поделиться

Если вы действительно хотите округлить до первых 4 дробных цифр, вы также можете использовать целочисленную арифметику, сначала умножив первое число так, чтобы его цифры были сдвинуты на нужное количество f мест влево:

long fractionalPart = 10000L * 890L / 1440L;

Я использую здесь long, чтобы избежать переполнения в случае, если временный результат не поместится в 32 бита.

0
ответ дан 8 December 2019 в 02:17
поделиться
Другие вопросы по тегам:

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