在[0,1.0]
之间生成一个随机数i = (float) rand() / RAND_MAX / 1;
我不只是想打印一个小数点,我希望变量有一个小数点 我们怎么做?
(即0.1;不是0.1224828)
答案 0 :(得分:6)
你实际描述的是一个随机整数,其可能的值在0到10的范围内。所以你要写:
int i = rand() / (RAND_MAX / 11 + 1);
或实际上以其他方式生成整数i
,使得0 <= i <= 10。
现在,i
是您的值缩放10。
如果您想要除以10,请执行以下操作:
float f = i / 10.0;
请注意,二进制浮点变量不能精确地表示0.1,0.2,0.3,0.4,0.6,0.7,0.8和0.9。列表中唯一可以精确表示的值是0.0,0.5和1.0。这就是为什么最好将信息存储在整数变量中。
注意:正如其他人所指出的那样(谢谢),显而易见的rand() % 11
具有较差的随机性。我更新了答案以避免使用它。
答案 1 :(得分:3)
在浮点变量中存储值“R”时,通常不会存储“R”。相反,您必须将最接近的合法浮点值存储到“R”。 comp.lang.c FAQ
即使您没有尝试在范围内生成随机整数,也应该阅读How can I get random integers in a certain range?此表达式
(int)((double)rand() / ((double)RAND_MAX + 1) * N)
比明显rand() % N
更好;此外,它的课程适用于其他情况。
答案 2 :(得分:0)
尝试:
i = ((float)( rand()%11) ) /10;