在C++中获取一个数字的百分比

12

我该如何计算整数的百分比?
例如,如果我想从一个数字中得到30%,如果我使用这段代码示例,我将得到错误的答案:

int number = 250;
int result = (number / 100) * 30;  

结果将会是60,而真正的答案是75,有没有办法计算出来?


4
你正在做一个整数除法 250/100 = 2.5,但由于这是整数运算,所以结果为2... 最简单的解决方法是通过将100变成浮点数100.0来执行浮点数除法。 "int result = (number / 100.0) * 30;" - jcoder
11个回答

18

先乘后除:

int result = number * 30 / 100;

你得到的结果是因为使用整数类型进行除法运算产生的整数结果,例如250/100等于2。如果在除法之前先进行乘法运算,你仍然会得到一个整数结果,但至少在中间步骤中不会丢失数据。如果你需要处理非常大的数字,则有可能溢出int所允许的范围。

另一种方法是使用浮点数运算,在这种情况下,除法可以产生整数的分数:

int result = number * 0.30;

这可能会产生意外的结果,所以最好像上面那样只使用整数。或者写成3.0/10而不是0.30


整数转换是多余的,因为结果将会隐式地被转换。 - Sceptical Jule
谢谢,显式转换已经移除。我以为编译器至少会警告精度损失... - Joni
3
大多数编译器会提示隐式转换的警告。显式转换之所以有用,是因为它可以让其他开发者和编译器清楚地了解你的意图。警告信息的原因是,在隐式转换时无法确定转换是否是有意的或错误的。 - Sean Middleditch
如果第一次乘法的结果超出了 int 的范围怎么办?例如,考虑以下代码:int number = 1000000000; int result = number * 30 / 100;。由于溢出,result` 不会是 300000000。 - LRDPRDX

3

可以像其他人建议的那样交换操作数,但是如果您不想这样做,还有另一种解决方案:

int number = 250;
int result = static_cast<double>(number) / 100 * 30; 

3

假设数字比较小,你可以直接反过来:

 int result = (number * 30) / 100;

(括号不是必需的,但有助于澄清)。

如果其中任意一个数字超过了数百万,则此方法无法正常工作,但对于小于该范围的数字来说应该是可以的。


2

试一下这个,

int number = 250;
float result = number  * (float)(30/100.0);

2
为什么要使用float而不是double? - doctorlove
目前给定的数字相当小,所以使用float应该足够了...那为什么不用呢?顺便说一句:float比double更快。 - CodeCrusader
@doctorlove 在这里有一个很好的答案https://dev59.com/zHA75IYBdhLWcg3wMl8Z,以便在可能的情况下说服您选择float。 - CodeCrusader
2
@CodeCrusader 仍然应该将 double 设置为默认值。在大多数领域中,由于精度不足而遇到问题的可能性比浮点性能不足要高得多。 - ComicSansMS
1
为什么要将30/100.0转换为浮点数?它本身不就是浮点数吗? - SpongeBobFan
真实的...在某种意义上它是冗余的。 - CodeCrusader

1

0
整个程序就像这样:
double number , result;

cout << "Enter the number:";
cin >> number;

result = number * 30.0 / 100;
cout << "Result = " << result << endl;

你会得到你的答案...


0

你需要执行浮点数运算,否则编译器会将这里的所有算术操作都作为整数进行。

你可以尝试

int result = (number / 100.0) * 30;

0
使用浮点数:
float number = 250;
float result = (number / 100.0) * 30

只是在那里放置带小数点的100.0可能就足够了。

因为如果按照您的方式进行计算,250/100在整数中等于20(您只能将100放入200两次,整数不关心剩下的50),然后乘以30=60。


0

现在我考虑一些解决方案:

int number = 250;
int result = number * 100;
result = (result / 100) * 30;
result /= 100;

-1

分数/物品*30 例如;

15%

int score, items;
cout<<"input your score"<< score<<endl;
cin>>score;
cout<<"input number of items"<<items<<endl;
cin>>items;
float total=score/items*15
cout<<"you got "<<total<<""<<endl;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接