如何在double变量中划分两个整数?

时间:2009-02-20 03:51:58

标签: c++

我正在为一所学校的实验室工作,这个实验室运行着10000张5张牌的10条步道。我必须在每只手中找到冲洗和成对。我必须找到每条线索的对和冲洗的百分比。

我的问题是当我试图获得一对一条路径的百分比时,例如

double percent =  total_pairs/10000;

double percent = 5600/10000;

当我想要打印出2位小数时,我的输出变为0,我得到以下

0.00

使用此代码

cout<<setiosflags(ios::fixed | ios::showpoint);
cout<<setprecision(2)<<percent<<endl;

但是我仍然得到零我得到的实际数字是这样的

double percent = (double) 5600/10000;

这是正确的,因为我不希望它截断我的输出或我错过了什么

希望你能理解我。

4 个答案:

答案 0 :(得分:8)

是的,就是这种情况,下面执行整数除法。然后将结果(0)转换为double。

double percent = 5600/10000

下面一行强制5600为双倍,所以现在你有实际的双打分区

double percent = (double) 5600/10000

如果你的一个数字是常数,你可以确保使用十进制格式来强制浮点除法:

double percent = 5600.0/10000

我有时使用的另一个技巧是乘以1.0,将后面的内容转换为double:

double percent = 1.0 * inta / intb

答案 1 :(得分:7)

“total_pairs”是否为int?如果是这样,则除以整数除法。您需要将其中一个数字显式地转换为double(另一个将自动提升为double):

double percent = ((double)total_pairs)/10000; // or just simply 10000.0

答案 2 :(得分:2)

除以整数给出一个C和C ++的整数(我不确定相应操作的正确英文单词,但10/4给你2等,这是除法的整数部分)。以下是:

double a = 1000 / 10000;

首先计算,作为int,1000/10000(在这种情况下为0),然后将其转换为double。

转换参数是一种方式 - 我更喜欢自己输入float而不是整数,但这是个人偏好:

double a = 1000. / 10000.;

(只有一个就够了:那就是1000 / 10000.也可以。)

答案 3 :(得分:2)

您的代码存在问题:

double percent = (double) 5600/10000;

您是否假设类型转换适用于5600.它没有。实际发生的是分裂完成(并截断,因为两个数字都是整数),然后最终结果被转换为double。所以,你得到截断的结果。上面的代码相当于:

double percent = (double) (5600/10000);

分区根据需要运行所需的是分子(第一个数字)为double。您可以通过将转换包装在括号中来完成此操作

double percent = ((double) 5600)/10000;

如果分子实际上是变量,那么更有用。或者,如果要处理数字常量,可以在数字的末尾加上小数位。

double percent = 5600.0/10000;