Розбиття чисел на java дає нульові значення

У мене є простий код для перевірки, будь ласка, перевірте наступне. чому мій код не повернув очікуваний результат.

public class test {

public static void main(final String a[]) {
    final double d1 = 1/1000;//should be 0.001
    final double d2 = 2/20;//should be  0.1
    System.out.println(d1 + "--" + d2);//0.0--0.0
 }
}
0
Ви створюєте цілі розділи, які віддані double після закінчення розділів.
додано Автор Anders Gustafsson, джерело
Скільки ідентичних відповідей нам потрібно?
додано Автор Steve Kuo, джерело

7 Відповіді

Ви розділяєте цілі числа, створюючи таким чином цілі числа, 0 , які зберігаються як 0.0 .

Використовуй це :

final double d1 = 1d/1000;//divide a double by an integer -> get a double
10
додано

Ви повинні зробити

public static void main(String[] args) { 
        final double d1 = 1d/1000;//0.001
        final double d2 = 2d/20;//0.1
        System.out.println(d1 + "--" + d2);//0.001--0.1
     }

де передбачається використання "d" для швидкого перетворення, щоб подвоїтись.

Пам'ятайте, що насправді вам потрібно перетворити їх обидва. Але один, якщо один з них подвійний, інший буде неявно перетворений.

3
додано

Ви виконуєте цілі ділення замість подвійного поділу.

Змініть, наприклад, на:

public class test {

public static void main(final String a[]) {
    final double d1 = 1.0/1000.0;//0.001
    final double d2 = 2.0/20.0;//0.1
    System.out.println(d1 + "--" + d2);//0.0--0.0
 }
}
2
додано

Ой, переможець!

Ви робите цілочисельне поділ, якщо ви не могли сказати жоден з шести інших повідомлень, що повідомляють вам те саме.

2
додано
"Ох, переможець!" ? Серйозно, ви прийдете довго після перших відповідей, чому б не стримати, щоб додати цю дублюючу відповідь?
додано Автор Denys Séguret, джерело

використовувати

   final double d1 = (double)1/1000;//0.001
    final double d2 = (double)2/20;//0.1
    System.out.println(d1 + "--" + d2);//0.0--0.0

Причина:

1 and 100, both are integers. So 1/100 will be definitely an integer. So although the theoretical value is 0.001 but as it will return an integer so it will return 0. So you need to cast one value to double. or використовувати like dystroy suggested

0
додано
Якщо вам цікаво, якщо я понизив, то відповідь - ні. Я вважаю, що вас зрівняли, оскільки однакові відповіді насправді не є корисними, але в цьому випадку просте питання, оскільки я відмінно знаю, що ви не скопіювали, але вже знали відповідь, я не бачу точки вниз. РЕДАКТИРОВАТИСЯ. Я вже просто відмовився від двох останніх відповідей, які давно забажають і дійсно непотрібні (один з відповідей навіть згадував про "перемогу").
додано Автор Denys Séguret, джерело
причина зниження?
додано Автор stinepike, джерело
хтось давав всього, крім ... дистрою .. дивний !! ... downvoter, виправте нас, якщо ми помиляємося
додано Автор stinepike, джерело
@dystroy .. ні, я не думаю, що ти справді зрівнявся .. Я поважаю вашу репутацію і, безумовно, така репутація може бути зароблена тільки фахівцями ... :)
додано Автор stinepike, джерело

Спробуйте це,

public static void main(final String a[]) {
    final double d1 = 1/1000d;//0.001
    final double d2 = 2/20d;//0.1
    System.out.println(d1 + "--" + d2);//0.0--0.0
 }
0
додано
public class test {

public static void main(final String a[]) {
    final double d1 = 1d/1000d;//0.001
    final double d2 = 2d/20d;//0.1
    System.out.println(d1 + "--" + d2);//0.0--0.0
 }
}
0
додано
ІТ КПІ - Java
ІТ КПІ - Java
436 учасників