Приведение типа Java / сужение примитивной переменной - PullRequest
0 голосов
/ 14 марта 2019

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

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 .

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

Ответы [ 3 ]

1 голос
/ 14 марта 2019

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

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

double totalValue = logVarA + logVarB + timeStampInSec;
System.out.printf("%f%n", totalValue);         // 1552547672.477121
0 голосов
/ 14 марта 2019

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

Таким образом, исходное число было 1552543514.4771214.

0 голосов
/ 14 марта 2019

1.5525435144771214E9 это 1552543514 .... делится на 1000 это 1552543 ....

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

...