rndmBid=rand() % (sellPtr->sellPrice + (1.25*sellPtr->startPrice));
这条线有什么问题?一切都是整数,除了1.25
(显然)并且编译器给出了一个错误,上面写着invalid operands of types 'int' and 'double' to binary 'operator%'.
我尝试改变startPrice
并rndmBid
加倍,但没有运气。有什么建议么?
一旦将 adouble
引入算术表达式,所有内容都会被提升/转换为双精度。所以你需要转换回整数:
rndmBid = rand() % static_cast<int>( ... );
(我相信您意识到您的随机数不会均匀分布。)
rhs 返回一个双精度数,而%
仅适用于整数。将结果转换为整数:
rand() % static_cast<int>(sellPtr->sellPrice + (1.25 * sellPtr->startPrice));
(sellPtr->sellPrice + (1.25*sellPtr->startPrice)
是双精度数,因为结果(1.25*sellPtr->startPrice)
是双精度数,因为1.25
是双精度数。将结果转换为 int ,它将编译:
rndmBid=rand() % static_cast<int>(sellPtr->sellPrice + (1.25*sellPtr->startPrice));
您正在将 int 添加到双精度,因此结果是双精度,不能与%
运算符一起使用。
要解决此问题,您需要执行以下操作:
rndmBid=rand() % ((int)(sellPtr->sellPrice + (1.25*sellPtr->startPrice)));
只要双精度不大于整数可以容纳的值,这将起作用。