在java中划分数字会给出零值

时间:2013-06-25 07:32:37

标签: 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
 }
}

7 个答案:

答案 0 :(得分:10)

您要对整数进行除法,从而生成整数0,这些整数存储为0.0

使用此:

final double d1 = 1d / 1000; // divide a double by an integer -> get a double

答案 1 :(得分:3)

你必须做

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"应该用于快速转换为双倍。

请记住,实际上你需要转换它们。 但是,如果其中一个是双,另一个将被隐式转换。

答案 2 :(得分:2)

您正在执行整数除法而不是双除法。

例如,更改为:

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
 }
}

答案 3 :(得分:0)

使用

   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和100,都是整数。所以1/100肯定是一个整数。因此,虽然理论值是0.001,但因为它将返回一个整数,所以它将返回0.所以你需要将一个值转换为double。或使用像建议的破坏

答案 4 :(得分: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
 }
}

答案 5 :(得分:0)

试试这个,

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
 }

答案 6 :(得分:-2)

噢,一个潮流!

你正在进行整数除法,如果你不能通过其他六个帖子告诉你同样的事情。