Java 数学。随机情景

Java 数学。随机情景,java,math,Java,Math,示例1:50+(int)(Math.random()*50)返回一个介于50和99之间的整数。十进制形式的最大数字为99.9 示例2: 34+(int)(Math.random()*21)返回一个介于34和55之间的整数。 十进制形式的最大数字为54.9 为什么示例2返回55而不是54?我假设这是教科书或教程中的结果?第二个例子是错误的。它应该是“34到54”,就像你认为的那样。Math.random()返回一个介于[0.0,1.0)范围内的十进制数 所以你的假设在每个例子中都是正确的 对于第一

示例1:
50+(int)(Math.random()*50)
返回一个介于50和99之间的整数。十进制形式的最大数字为99.9

示例2:
34+(int)(Math.random()*21)
返回一个介于34和55之间的整数。
十进制形式的最大数字为54.9


为什么示例2返回55而不是54?

我假设这是教科书或教程中的结果?第二个例子是错误的。它应该是“34到54”,就像你认为的那样。

Math.random()
返回一个介于
[0.0,1.0)
范围内的十进制数

所以你的假设在每个例子中都是正确的

对于第一个示例,50+49.9=99.9

对于第二个示例,34+20.9=54.9

我不确定从何处得到55,例如2,因为当小数被转换为int时,小数将失去其精度,有效地将其四舍五入,以创建最大值99(例如1)和54(例如2)

编辑

这本书是错误的,如果你想让范围是34到55,那么代码必须是

34 + (int)(Math.random() * 22)

这是Y.Daniel Liang写的一本名为《Java编程入门》的书。物理版和在线版都有例子2作为答案。我还发现一些大学也用它作为问题的答案。“十进制形式的最大数字是54.9”表达式
Math.random()的最大值*21
是严格小于
1.0
的最大
double
的21倍,四舍五入到最接近的
double
。我相当确定该值严格小于
21
,并且非常确定该值不是
20.999…
。Java浮点是二进制的,而不是十进制的,所以讨论rep事实上,吃9是不合理的。