【问题标题】:Java dividing incorrectly [duplicate]Java划分不正确[重复]
【发布时间】:2015-08-04 07:12:05
【问题描述】:

我正在使用 Java 7

我正在尝试通过将两个整数相除来获得双精度:

double chance = 1/main.getConfig().getInt("dailygiftItems.items."+key+".chance");
double w = Math.random();
System.out.println("Pulled: "+main.getConfig().getInt("dailygiftItems.items."+key+".chance"));
System.out.println("itemChance: "+chance);
System.out.println("itemRand: "+w);
if(!(w < chance))continue;

但是机会返回 0。如您所见,我已经调试了所有值,这就是它们带给我的:

拉动:5

itemChance: 0

itemRand:一些随机双精度(正常工作)

我在想我是否做错了数学,而 5/1 不是 0.2,所以我使用了计算器。但是计算器返回给我 0.2。

然后我用更简单的方法测试了同样的问题:

public class Test
{

    public static void main(String[] args)
    {
        double chance = 1/5;
        double w = Math.random();
        System.out.println("Chance: "+chance);
        System.out.println("Random: "+w);
        if(!(w < chance))
        {
            System.out.println("no");
            return;
        }
        System.out.println("yes");
    }

}

这产生了相同的结果:

几率:0

w:一些随机的双精度(工作)

我的问题:为什么 java 没有正确划分这个,我该如何解决?

【问题讨论】:

  • 为什么你认为两个整数相除可以得到一个双精度值?对我来说毫无意义。
  • 如果值为 13/5,则为双倍
  • 结果将是2,这是不正确的。
  • 我希望结果是双精度,所以结果不会是 2。如果修饰符是 int,那么是的。
  • 如果将两个整数相除,那么结果也将始终为整数。

标签: java int double divide


【解决方案1】:

使用double chance = 1./main.getConfig().getInt("dailygiftItems.items."+key+".chance");

1 之后的 . 将强制编译器认为这是一个浮点 (double) 操作。

【讨论】:

  • 我宁愿使用1d/1.0/(double) 1/,虽然1./ 有效但读起来很丑
  • @BackSlash 对我来说唯一不难看的是1.0,但要输入一个字符:)。无论如何,这是风格和观点的问题。
猜你喜欢
  • 1970-01-01
  • 2014-01-27
  • 2014-10-22
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 2021-10-07
  • 2015-02-22
  • 1970-01-01
相关资源
最近更新 更多