C / C ++如何减少浮点数变量的有效小数

时间:2013-03-28 14:08:31

标签: c++ c floating-point

在[0,1.0]

之间生成一个随机数
i = (float) rand() / RAND_MAX / 1;

我不只是想打印一个小数点,我希望变量有一个小数点 我们怎么做?

(即0.1;不是0.1224828)

3 个答案:

答案 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;