在C ++中使用带有变量的cout时出错

时间:2012-08-29 20:01:42

标签: c++

我正在用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 << " ";  
}

9 个答案:

答案 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)

当价格= 52时,

价格/ 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) * taxprice / (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