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

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

我尝试改变startPricerndmBid加倍,但没有运气。有什么建议么?

4

4 回答 4

4

一旦将 adouble引入算术表达式,所有内容都会被提升/转换为双精度。所以你需要转换回整数:

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

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

于 2013-04-28T21:45:39.360 回答
2

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

rand() % static_cast<int>(sellPtr->sellPrice + (1.25 * sellPtr->startPrice));
于 2013-04-28T21:45:29.173 回答
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));
于 2013-04-28T21:47:14.507 回答
0

您正在将 int 添加到双精度,因此结果是双精度,不能与%运算符一起使用。

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

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

只要双精度不大于整数可以容纳的值,这将起作用。

于 2013-04-28T21:45:46.127 回答