Почему у меня значение Current Asia Population выдается с буквой Е,да и вообще неправильно?

package casting02;

public class Casting02 {
    public static void main(String[] args) {


        long currentWorldPop = 7_000_000_000L;
        System.out.println("Current World Population: " +currentWorldPop);

        //World population in 1950,  Source: United Nations Population Division
        //2.52 Billion
        int africaPop   =   221_000_000;
        long asiaPop     =  1_402_000_000;
        int europePop   =   547_000_000;
        int americasPop =   339_000_000;
        int oceanaPop   =    13_000_000;
        System.out.println("World Population in 1950: " 
                +(africaPop +asiaPop +europePop +americasPop +oceanaPop));

        //The current population of Asia is an estimated 60% of the world population
        double percentAsia = (float)0.6;
        double currentAsiaPop  =currentWorldPop * percentAsia;
        System.out.println("Current Asia Population: " +currentAsiaPop);      

    }  
}

Ответы (3 шт):

Автор решения: Vladimir Yarovoy

Используйте BigDecimal, вот пример:

long currentWorldPop = 7_000_000_000L;
BigDecimal percentAsia = new BigDecimal("0.6");
BigDecimal currentAsiaPop  = percentAsia.multiply(BigDecimal.valueOf(currentWorldPop));
System.out.println("Current Asia Population: " + currentAsiaPop);

Или

long currentWorldPop = 7_000_000_000L;
double percentAsia = 0.6D;
double currentAsiaPop  = currentWorldPop * percentAsia;
System.out.println("Current Asia Population: " + new DecimalFormat("#").format(currentAsiaPop));

Неправильно считалось, потому что вы при определении percentAsia делали приведение типов, в этом случае теряется точность.

→ Ссылка
Автор решения: Smetana Po Aktsii

Все заработало,когда я изменил строчку таким образом long currentAsiaPop =(long)(currentWorldPop * percentAsia); кто-нибудь может объяснить как так получилось?

→ Ссылка
Автор решения: insolor

Можно выводить через System.out.printf:

System.out.printf("Current Asia Population: %.2f\n", currentAsiaPop);

Вместо %.2f при выводе подставится ваше число, в данном случае выведется в формате с точкой с 2 знаками после точки (например, 4200000166.89).

Другой вариант, форматировать строку с помощью класса MessageFormat:

System.out.println(MessageFormat.format("Current Asia Population: {0, number, #.##}", currentAsiaPop));

Вывод будет аналогичный.

→ Ссылка