2009-02-20 75 views
1

我正在为一个运行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; 

这是正确的

希望你能理解我。

+0

任何人都可能认为这个问题是本地化的?这是一个非常全球性的问题 - 必须导致浮动的整数划分。 – 2016-08-14 06:42:53

回答

7

“total_pairs”是一个int吗?如果是这样,则划分为整数除法。您需要显式转换中的一个号码为双(和其他将自动提升为双):

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

这个小例子显然并不重要,但我会建议使用更详细的static_cast ,因为它可能很难找到c风格的演员。 – CTT 2009-02-20 04:16:10

+0

您还可以编写:double percent = double(total_pairs)/ double(10000)。较少的parens。 – 2009-02-20 08:16:01

+0

只需用`/ 10000.0`替换`/ 10000`即可。 – 2016-08-14 06:44:45

2

除以整数让你在C和C++的整数(我不知道正确的英文字为相应的操作,但10/4给你2,等等...这是划分的整数部分)。所以如下:

double a = 1000/10000; 

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

铸造的说法是单向的 - 我喜欢简单地输入浮动而不是整数自己,但是这是个人喜好:

double a = 1000./10000.; 

(只是一个就够了:那是1000/10000也能发挥作用)。

8

是的,这是这种情况,下面进行整数除法。结果(0)然后被转换为双精度。

double percent = 5600/10000 

以下部队5600线是双所以现在你有双打的具体分工

double percent = (double) 5600/10000 

如果你的号码中的一个是恒定的,你可以只是确保你使用十进制格式,它强制浮点除法:

double percent = 5600.0/10000 

我有时使用的另一个技巧是乘以1。0它转换接下来为双:

double percent = 1.0 * inta/intb 
2

与您的代码的问题:

double percent = (double) 5600/10000; 

是要假设类型转换适用于5600没有。实际发生的是分割完成(并截断,因为两个数字都是整数),然后最终结果转换为双精度值。所以,你会得到截断的结果。上面的代码相当于:

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

您需要的分部功能,因为您需要分子(第一个数字)是一个双。你可以通过将括号包裹在圆括号中来做到这一点

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

如果分子实际上是一个变量,哪一个更有用。或者,如果您正在处理数值常数,则可以在数字的末尾加上一个小数位。

double percent = 5600.0/10000; 
相关问题