C编程,在两个整数之间生成一个浮点数

C编程,在两个整数之间生成一个浮点数,c,C,C程序设计 我想生成一个浮动数money ex32.52,范围从10到40,包括10到40 float money; srand(time(NULL)); money = 10+ ( rand() % (40 - 10 + 1 )); printf("Show amount: %.2f ",money); 这只生成整数,例如:17.00;20.00..... 试试这个: money = 10 + (float)rand()/RAND_MAX * (40 - 10); rand函数生成值介

C程序设计 我想生成一个浮动数money ex32.52,范围从10到40,包括10到40

float money;
srand(time(NULL));
money = 10+ ( rand() % (40 - 10 + 1 ));
printf("Show amount: %.2f ",money);
这只生成整数,例如:17.00;20.00.....

试试这个:

money = 10 + (float)rand()/RAND_MAX * (40 - 10);
rand函数生成值介于0和rand_MAX(含)之间的伪随机整数。您的公式涉及整数运算,因此生成整数值。您的目标可以通过以下方式实现:

double money;

money = 10.0 + (double)rand() * 30.0 / (double)RAND_MAX;
printf("Show amount: %.2f ", money);
这将在目标范围内生成peudo随机浮点值。它可能不符合您的目的,因为这些值不是整数。事实上,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);
如果货币可以是负数,则必须特别注意打印负数:

if (money < 0) {
    printf("Show amount: -%u.02u", -money / 100, -money % 100);
} else {
    printf("Show amount: %d.02d", money / 100, money % 100);
}
如果决定使用浮点值,请使用double类型。 上面例子中的一些类型转换并不是绝对必要的,因为晋升规则会使它们变得含蓄,为了清晰起见,我特意写了它们

在[10.00…40.00]之间有40.00-10.00*100+10.01个数字


建议使用double和float

试着看看这里:生成一个介于100和400之间的随机数,然后除以10.0f怎么样?您还可以调整限制值以获得所需的每一个精度。另外,如果您正在生成生产软件,您绝对不应该使用“float”来存储货币值,因为float的精度太小。这里已经有一个关于它的讨论:尽管如此,如果这只是一个形成性的问题,请随意忽略。其他答案在向您展示如何从整数计算中获得浮点值时都是有效的。此公式无法精确生成40.0。因此,范围10到40不包括在内。RAND_MAX是从RAND返回的最大值。10+RAND_MAX/RAND_MAX*40-10=40对,我的意思是它可以精确地生成40.0。@JamesT.Huggett;不,它不能。事实上,在某些情况下,这个公式可能无法精确地生成40.0:RAND_MAX可能有一个不能精确表示为浮点的值。例如,INT32_MAX不能完全转换为32位浮点。如果计算为floatRAND_MAX/floatRAND_MAX,则floatRAND_MAX/RAND_MAX将为1.0,但如果计算为floatRAND_MAX/doubleRAND_MAX,则可能不会为1.0。
srand(time(NULL));
#define NUM_COUNT (4000-1000 + 1)
float money = 10.0 + (rand()%NUM_COUNT)/100.0;
printf("Show amount: %.2f ",money);