我知道这可能在之前的其他地方得到了解答,但我找不到任何与我有同样问题的人。我尝试生成一个后面有两个小数位的随机数,但有时它输出的值高于最大值。
((Math.random() * 4) + 1.8).toFixed(2);
由于某种原因,它不是产生4到1.8之间的数字,而是有时会高于4到例如5.25之类的值。有什么我做错了吗?一切看起来都不错,我不明白为什么它不起作用。任何有关这方面的帮助将不胜感激:)
答案 0 :(得分:2)
与4
相乘会生成0
和4
之间的数字,添加1.8
会在1.8
和5.8
之间生成一个随机数。要生成1.8
和4
之间的随机数,您需要乘以范围的差异。
((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位数。
我希望这可以回答你为什么它不起作用的问题,并且你现在可以得出你的解决方案。