【发布时间】:2017-04-11 02:18:59
【问题描述】:
我不太熟悉如何改变 Math.random 或 new Random() 的范围来生成这样的双精度。我需要能够在 -10 到 25 美分之间产生双倍(我的程序正在处理金钱;因此我说美分)。一个单独的实例正在生成 90 到 -75 美分之间的随机双倍。我在寻找答案时看到了这个:
double 结果 = Math.random() * (upper - lower) + lower;
但是当我在我的代码中实现这个想法时,当使用正数和负数之间的范围时,范围似乎不起作用...... 我用 0.25 的上限和 -0.10 的下限对其进行了测试,但注意到在我所做的一个测试实例中它打印了 0.3567587946356543。所以由此我得出结论,我显然没有正确调整范围..
请帮忙:(
这是我第一次使用stackoverflow,所以请放轻松,如果我说的任何内容没有意义,我会详细说明..
这是我使用此代码的现有方法:
public double variation(double price){
//formula: (Math.random() * range) + min; where range = max - min
//80% of the time returns amount between -10 & 25 cents
if(Math.random() > 0.19){
return (Math.random() * 0.35) - 0.10;
}
//20% of the time returns amount between -75 & 90 cents
return (Math.random() * 1.65) - 0.75;
}
我知道该方法会收取它不使用的双倍价格;接受双倍价格但忽略其价值是老师要求的一部分。所以请忽略它。
【问题讨论】:
-
upper和lower中的值 - 将这些行添加为代码 sn-p -
当它打印
0.35...时,它来自范围 -.75 到 0.90 的 20% 部分 -
您想要2位输出(如0.17)还是更长的输出(如0.11432810481633897)
-
@theProgrammer101 个人我更喜欢 2 位数的输出,但老师并不关心东西看起来有多“漂亮”。
-
顺便说一句,处理金钱的程序应该从不使用浮点数。