c ++如何获取随机数以及如何保存只有两位小数的双精度数?

时间:2012-05-09 20:25:37

标签: c++ double

我有以下内容:

   int R=25;
double pi=3.14;

double r=R*sqrt(rand());
cout<<"r: "<<r<<endl;
double th=2*pi*rand();
cout<<"th: "<<theta<<endl;

我想转换:r = 1.98,th = 5.08。我还希望double result = r * th与2个zecimals。

我打印double result =r*th时;这个数字非常庞大,不太现实。

如何将rth值更改为1.985.08?怎么解决这个问题?

我需要在“。”之后将每个双精度值改为2位小数。

我在ubuntu下使用c ++工作。

感谢

2 个答案:

答案 0 :(得分:2)

要在您指定的范围内生成随机值,请尝试以下操作:

r = (R*(rand()/(RAND_MAX + 1.0)));
th = (2*3.14*(rand()/(RAND_MAX + 1.0)));

表达式rand()/(RAND_MAX+1.0)生成[0,1.0)范围内的值。乘以范围限制可以得到您想要的数字。

注意:这不会将数字限制为两位小数,这更像是打印方式的函数。要打印两个小数位,请尝试:

std::cout << std::fixed << std::setprecision(2) << r << "\n";
std::cout << std::fixed << std::setprecision(2) << th << "\n";
std::cout << std::fixed << std::setprecision(2) << (r*th) << "\n";

请参阅此问题:C++ generating random numbers

答案 1 :(得分:0)

如果您需要将两个数字减小相同的数量,那么您可以简单地将它们分成相同的数字。无论如何,你将失去大致相同的精度。

如果你真的想通过砍掉指数来彻底改变结果,那么你可能会挖掘双数字格式本身并将尾数分开。

为什么你这样做对我来说是一个谜。