C编程 我想从10到40(包括10和40)的范围内生成一个浮点数(金额为32.52)。
float money;
srand(time(NULL));
money = 10+ ( rand() % (40 - 10 + 1 ));
printf("Show amount: %.2f ",money);
这只生成整数(例如:17.00; 20.00 .....)
答案 0 :(得分:0)
试试这个:
money = 10 + (float)rand()/RAND_MAX * (40 - 10);
答案 1 :(得分:0)
rand()
函数生成伪随机整数,其值介于0
和RAND_MAX
之间。您的公式涉及整数运算,因此生成整数值。您的目标可以通过这种方式实现:
double money;
money = 10.0 + (double)rand() * 30.0 / (double)RAND_MAX;
printf("Show amount: %.2f ", money);
这将在目标范围内生成peudo-random浮点值。它可能不适合您的目的,因为这些值不会是一个圆的分数。实际上,IEEE浮点数或双精度数不能精确地代表所有精确的分数。使用这种方法你会更接近:
money = 10.0 + (double)(rand() % 3001) / 100.0;
值将尽可能接近精确的分数,但更精确和更简单的方法只是计算整数美分并仅在打印时转换为货币:
int money = 1000 + rand() % (4000 - 1000 + 1);
printf("Show amount: %d.02d", money / 100, money % 100);
如果money
可能是否定的,则必须格外小心打印负值:
if (money < 0) {
printf("Show amount: -%u.02u", -money / 100, -money % 100);
} else {
printf("Show amount: %d.02d", money / 100, money % 100);
}
如果您决定使用浮点值,请使用double
类型。
上面例子中的一些演员并不是绝对必要的,因为晋升规则会使它们含蓄,我为了清楚起见,故意写了这些演员。
答案 2 :(得分:0)
[10.00 ... 40.00]
之间有(40.00-10.00)*100 + 1
0.01
个数字。
srand(time(NULL));
#define NUM_COUNT (4000-1000 + 1)
float money = 10.0 + (rand()%NUM_COUNT)/100.0;
printf("Show amount: %.2f ",money);
建议使用double
与float
。 @Matt Taylor