【问题标题】:How to divide down to decimals and not get zero in Java? [duplicate]如何在Java中除以小数而不是零? [复制]
【发布时间】:2013-02-07 00:00:35
【问题描述】:
double[] arrayName = new double[10]; 
arrayName[0] = (14/49)*100;

尝试获取两个数字 14 / 49 的百分比,并将结果添加到数组中。它返回的只是 0.0。如果我使用浮点数而不是双精度数,同样的事情。 Java 新手。

【问题讨论】:

    标签: java division


    【解决方案1】:

    要么将ints 转换为double,要么只使用doubles。

    例如:

    double[] arrayName = new double[10]; 
    resultValue[0] = (14.0/49.0)*100;
    

    或:

    double[] arrayName = new double[10]; 
    resultValue[0] = ((double)14/49)*100;
    

    【讨论】:

    • 由于某种原因无法正常工作。这就是我所拥有的: double[] arrayName = new double[10];数组名[0] = (双)(14/49)*100; System.out.println("结果:"+arrayName[0]);'返回 0.0。很抱歉在此评论中格式化
    • 工作,谢谢@mmnumbp!但我必须这样做 '((double)14/(double)49)*100;'第一种方法无效。
    • 啊抱歉,我放错了地方。在这里,我将编辑答案。
    • @batoutofhell:您可以使用反引号来格式化 cmets 中的内联代码。
    【解决方案2】:

    你怎么看:

    (double/double)*double
    

    JVM 如何看待它

    (int/int)*int
    

    来自JLS。 int 到 double 是一个扩大的转换。来自§5.1.2

    加宽基元转换不会 失去关于整体的信息 数值的大小。

    [...]

    int 或 long 值的转换 浮动,或长值 双倍,可能会导致损失 精度——即结果可能会丢失 的一些最低有效位 价值。在这种情况下,结果 浮点值将是 正确舍入的版本 整数值,使用 IEEE 754 四舍五入模式(§4.2.4)

    如果您将其中一个替换为双字面值(例如添加 .0 或将其中一个转换为 double,您应该会得到预期的结果。

    【讨论】:

      【解决方案3】:

      像这样:

      arrayName[0] = (14/49)*100.0; // put ".0" after any of the numbers
      

      或者这个:

      arrayName[0] = (double)(14/49)*100;
      

      【讨论】:

        【解决方案4】:

        至少有一个值应该是double

        double[] arrayName = new double[10]; 
        arrayName[0] = (14d/49d)*100;
        // or...
        // arrayName[0] = (14d/49)*100;
        // or...
        // arrayName[0] = (14/49d)*100;
        // or...
        // arrayName[0] = (14.0/49)*100;
        // or...
        // arrayName[0] = (14/49.0)*100;
        // or...
        // arrayName[0] = (14/(double)49)*100;
        // or...
        // arrayName[0] = ((double)14/49)*100;
        // or...
        // arrayName[0] = ((double)14/(double)49)*100;
        

        【讨论】:

          【解决方案5】:

          正如许多其他人指出的那样,您只需将常量设置为双精度:

          arrayName[0] = (14*100)/49.0;
          

          这样,您只需将最后一个计算转换为 double 而不是开始,并减少浮点计算的数量。

          顺便说一句,如果您愿意,您也可以使用相同的交换顺序的方法将结果作为整数,并在除法之前使用乘法,例如:14*100/49 而不是 (14/49)*100 .

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-04-01
            • 2013-06-04
            • 2012-02-12
            • 2012-07-23
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多