【问题标题】:Random float within a range?范围内的随机浮动?
【发布时间】:2018-02-17 20:51:13
【问题描述】:

我正在尝试创建一个介于 15.00 和 40.00 之间的随机数,用于计算。具体任务是构建一个程序,接收售出的门票数量并计算这些门票销售的总收入,其中三种门票类型具有恒定价格值,其中一种门票类型具有介于两者之间的随机价格值15.00 美元和 40.00 美元。我怎样才能做到这一点?

我已经接近了这一点,但前提是我将 mystmax 和 mystmin 声明为“int”。我希望它们是双倍的,所以我可以在 $15.00 和 $40.00 之间设置每个十进制值:

  unsigned seed = time(0);

    srand(seed);
    double mystery = (rand() % (mystmax - mystmin+1))+mystmin;

这是我尝试将最小值和最大值设为双精度时遇到的错误:

“'int'和'double'类型的无效操作数到二进制'operator%'”

我能做些什么来解决这个问题?

【问题讨论】:

  • 你真的需要花车吗?或者你只需​​要两位小数?您说您需要“15.00 美元到 40.00 美元之间的每一个十进制值”,但这要么是无穷大(数学上),要么是数百万(实际 double 范围约束)
  • 小数点后两位即可。

标签: c++ random double


【解决方案1】:

不要。

你既不需要也不想要货币的浮点数。

有一些方法可以让它工作(std::uniform_real_distribution 会给你浮点随机值),但是这样做有很多问题(初学者的舍入错误),你只是不需要所有的无穷大这两个货币值之间的小数。

所以,坚持使用整数,在您的情况下计算 便士(美分?)。如果要转换为整数单位(美元?),请在最后除以 100 输出。

【讨论】:

  • 抱歉,我无法理解您的意思。我应该在哪里除以 100,目的是什么?当我按照您所说的那样在最后输出时,我得到的数字远小于应有的数字。如果我在其他几个地方这样做,它没有效果。你能详细说明一下吗?
  • 我假设您希望,在您尚未向我们展示的某个时刻,将最终的美元值输出到屏幕上,以便人类可以看到它。我建议您在整个代码中使用int,而不是double,作为您的货币价值,并在逻辑上认为该价值以便士为单位,而不是美元。当您想将美元值打印到屏幕上时,除以 100(一美元等于 100 便士,是吗?)。例如std::cout << '$' << (myNumberOfPennies / 100.0) << '\n';(加上一些调整以确保 2dp,但无论如何你必须这样做)
  • 抱歉,我花了一秒钟才明白,但效果很好。谢谢!!
  • @jackwilliamson:玩得开心!
猜你喜欢
  • 1970-01-01
  • 2013-12-20
  • 2016-09-25
  • 2012-04-01
  • 2012-08-06
  • 1970-01-01
  • 2011-05-17
  • 2011-12-16
相关资源
最近更新 更多