Math.random()高于它应该的?

时间:2016-11-08 04:35:52

标签: javascript

我知道这可能在之前的其他地方得到了解答,但我找不到任何与我有同样问题的人。我尝试生成一个后面有两个小数位的随机数,但有时它输出的值高于最大值。

((Math.random() * 4) + 1.8).toFixed(2);

由于某种原因,它不是产生4到1.8之间的数字,而是有时会高于4到例如5.25之类的值。有什么我做错了吗?一切看起来都不错,我不明白为什么它不起作用。任何有关这方面的帮助将不胜感激:)

3 个答案:

答案 0 :(得分:2)

4相乘会生成04之间的数字,添加1.8会在1.85.8之间生成一个随机数。要生成1.84之间的随机数,您需要乘以范围的差异。

((Math.random() * (4 - 1.8)) + 1.8).toFixed(2);
//              --^^^^^^^^^^--

答案 1 :(得分:0)

in vec2 uv_f; uniform float nearz; uniform float farz; uniform mat4 inv_view_proj_mat; float linearize_depth(in float depth){ float a = farz / (farz - nearz); float b = farz * nearz / (nearz - farz); return a + b / depth; } float reconstruct_depth(){ float depth = texture(depth_tex, uv_f).r; return pow(2.0, depth * log2(farz + 1.0)) - 1.0; } vec3 reconstruct_world_pos(){ vec4 wpos = inv_view_proj_mat * (vec4(uv_f, linearize_depth(reconstruct_depth()), 1.0) * 2.0 - 1.0); return wpos.xyz / wpos.w; } 生成0到1之间的数字。想象一下,它会生成Math.random()。然后0.9(0.9 * 4) + 1.8。问题是你乘以4然后再加上4以上。要解决这个问题,你可以使用

5.4

然后,如果((Math.random() * (4 - 1.8)) + 1.8).toFixed(2) 生成Math.random(),则结果将为0.9,即(0.9 * 2.2) + 1.8,小于4。

答案 2 :(得分:0)

((Math.random() * 4) + 1.8).toFixed(2);

这部分在括号中,因此将首先评估:(Math.random() * 4)

这会给你一个0到4之间的数字。

然后,你要加1.8,这意味着你的结果介于1.8和5.8之间,四舍五入到小数点后的2位数。

我希望这可以回答你为什么它不起作用的问题,并且你现在可以得出你的解决方案。