我正在用C ++编写一个简单的程序来计算购买税并输出它。我的代码输出文本和设置但未更改的变量。但是,不是输出正在计算和根据税率设置的变量,而是输出0.感谢任何帮助!上课的第一周对我来说,如果可以的话,试着把它弄下来:)
以下是代码:
#include <iostream>
using namespace std;
int main()
{
int price = 52, stateTaxRate = 4, countyTaxRate = 2;
double stateTax = price / 100 * stateTaxRate;
double countyTax = price / 100 * countyTaxRate;
double totalTax = countyTax + stateTax;
double total = price + totalTax;
cout << "State Tax: " << stateTax << " ";
cout << "County Tax: " << countyTax << " ";
cout << "Total Tax: " << totalTax << " ";
cout << "Total: " << total << " ";
}
答案 0 :(得分:6)
你正在进行整数除法。
int price = 52, stateTaxRate = 4, countyTaxRate = 2;
正在进行评估
price / 100
结果为0。
整数除以另一个整数不会导致C ++中的浮点数。它会截断(即删除)您希望在“。”之后看到的所有内容。它不知道你正在评估的表达式的最内部点,最终所有内容都将转为双倍。
将变量更改为双精度数,您将获得不同的结果。
答案 1 :(得分:2)
double stateTax = price / 100 * stateTaxRate;
价格为price / 100
的 int
为0.使用
double stateTax = static_cast<double>(price) / 100 * stateTaxRate;
在其他情况下也是如此。
答案 2 :(得分:2)
价格/ 100为0。 如果你将价格改为双倍,你就会得到你想要的。
答案 3 :(得分:2)
您的输入是整数,并且方程式的设置方式使得结果将被处理&#34;也是一个整数。例如(简化以获得重点):
int price = 52;
double stateTax = price / 100;
stateTax
将为0,因为52/100 = 0.52为int,被截断为0。
在计算中将price
设为double,以获得预期结果:
int price = 52;
double stateTax = (double)price / 100;
因为52.0 / 100 = 0.52为双倍。
答案 4 :(得分:2)
类型转换问题。声明如下
double price = 52, stateTaxRate = 4, countyTaxRate = 2;
答案 5 :(得分:1)
你期望从你的计算中得到小数 - 浮点数,但它们都是使用整数值,所以你将失去小数部分。
例如,在此计算中:double stateTax = price / 100 * stateTaxRate;
,price/100
将最终为零。由于这是整数除法,因此小数部分被截断。
您需要强制进行浮点计算。这是一种方式(注意它使用100.0
而不是100
):
double stateTax = price / 100.0 * stateTaxRate;
或者,由于price
位于计算的根部,因此将其声明为double
:
double price = 52.0;
答案 6 :(得分:1)
将变量类型从int
更改为double
。
整数变量使编译器使用整数运算符,整数除法运算符(/)截断结果。那是你的问题。
(price / 100) * tax
或price / (100 * tax)
(无论编译器想先评估哪个)都将返回0.
答案 7 :(得分:1)
int / int = int
。
即使你将结果存储在double中,结果也会在它变为double之前被截断。
double stateTax = price / 100 * stateTaxRate;
与以下相同:
double = int / int * int
,表示结果为int,然后存储在double中。
尝试将100写为100.0。 或者你可以将你的注意力变成双打或漂浮物。
答案 8 :(得分:1)
只需将100
更改为100.0
对我们来说它是相同的,但是额外的.0
C ++会知道它是双倍的,你想要双重结果。
为什么呢?计算C ++时采用更精确的类型。
int + int = int;
int + double = double;
short int + int = int;
100 = int
100u = unsigned
100.0 = double
100.0f = float