Приведение типов Java / сужение примитивной переменной

#java #casting #primitive-types

#java #Кастинг #примитивные типы

Вопрос:

Я получаю экспоненциальное значение в результате выражения, где я добавляю double с long.

 package com.testing;

import java.util.Date;

public class TypeCasting {

    public static void main(String[] args) {
        long varA = 100000;
        long varB = 3000000;

        double logVarA = Math.log10(varA);      //  5.0
        double logVarB = Math.log10(varB);      // 6.477121254719663

        long timeStampInSec = new Date().getTime() / 1000;
        System.out.println(timeStampInSec);     // 1552543503

        double totalValue = logVarA   logVarB   timeStampInSec;
        System.out.println(totalValue);         // 1.5525435144771214E9

        double finalScoreDampingFactor = 1000;

        double finalScore = totalValue / finalScoreDampingFactor;
        System.out.println(finalScore);         // 1552543.5144771214   
    }

}
  

В переменной totalValue почему я получаю значение 1.5525435144771214E9 и когда я делю его на 1000, получаю 1552543.5144771214.

Может ли кто-нибудь объяснить, пожалуйста?

Комментарии:

1. Что вы ожидали от этого вывода?

Ответ №1:

Число имеет одно и то же значение, независимо от того, как оно представлено. То, что вы видите напечатанным в виде строки, является просто представлением числа.

По какой-либо причине JVM решила, что число должно быть напечатано в экспоненциальной форме. Если вы хотите заставить ее печатать по-другому, вы можете использовать printf.

 double totalValue = logVarA   logVarB   timeStampInSec;
System.out.printf("%f%n", totalValue);         // 1552547672.477121
  

Ответ №2:

Обозначение EX означает «умноженное на 10 в степени X».

Итак, исходное число было 1552543514.4771214 .

Ответ №3:

1.5525435144771214E9 равно 1552543514…. деленное на 1000 равно 1552543 ….

Возможно ли, что вы неверно истолковали 1.5525435144771214E9?