无法生成随机数?

时间:2013-04-28 21:43:41

标签: c++ random

rndmBid=rand() % (sellPtr->sellPrice + (1.25*sellPtr->startPrice));

这条线有什么问题吗?除了1.25(显然)之外,一切都是整数,编译器会给出一个错误invalid operands of types 'int' and 'double' to binary 'operator%'.

我尝试将startPricerndmBid更改为加倍,但没有运气。有什么建议吗?

4 个答案:

答案 0 :(得分:4)

double引入算术表达式后,所有内容都会被提升/转换为double。所以你需要转换回整数:

rndmBid = rand() % static_cast<int>( ... );

(我相信你会意识到你的随机数不会均匀分布。)

答案 1 :(得分:2)

rhs返回一个double,而%仅适用于整数。将结果转换为整数:

rand() % static_cast<int>(sellPtr->sellPrice + (1.25 * sellPtr->startPrice));

答案 2 :(得分:2)

(sellPtr->sellPrice + (1.25*sellPtr->startPrice)是双倍的,因为(1.25*sellPtr->startPrice)的结果是双倍的,因为1.25是双倍的。将结果转换为int,它将编译:

rndmBid=rand() % static_cast<int>(sellPtr->sellPrice + (1.25*sellPtr->startPrice));

答案 3 :(得分:0)

您正在为double添加一个int,因此结果为double,不能与%运算符一起使用。

要解决此问题,您需要执行以下操作:

rndmBid=rand() % ((int)(sellPtr->sellPrice + (1.25*sellPtr->startPrice)));

只要double不大于整数值,就可以正常工作。