1

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

9 回答 9

6

你正在做整数除法。

 int price = 52, stateTaxRate = 4, countyTaxRate = 2;

正在评估

 price / 100

结果为0。

一个整数除以另一个整数不会导致 C++ 中的浮点数。相反,它会截断(即删除)您希望在“.”之后看到的所有内容。它不知道在您正在评估的表达式的最里面点最终一切都会变成双精度。

将变量更改为双精度数,您将得到不同的结果。

于 2012-08-29T20:05:10.763 回答
2
double stateTax = price / 100 * stateTaxRate;

price / 100其中价格int为 0。使用

double stateTax = static_cast<double>(price) / 100 * stateTaxRate;

在其他情况下也是如此。

于 2012-08-29T20:03:43.160 回答
2

当价格 = 52 为 0 时,价格 / 100。如果您将价格更改为双倍,您将得到您想要的。

于 2012-08-29T20:04:38.290 回答
2

您的输入是整数,并且方程式的设置方式使得结果也将被“视为”整数。例如(简化以理解要点):

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 作为双倍。

于 2012-08-29T20:05:01.950 回答
2

类型转换问题。像这样声明

double price = 52, stateTaxRate = 4, countyTaxRate = 2;
于 2012-08-29T20:05:53.807 回答
1

只需更改100100.0 对我们来说它是相同的,但额外的.0C++ 会知道它是双倍的,你想要双倍的结果。

为什么?计算 C++ 时采用更精确的类型。

int + int = int;
int + double = double;
short int + int = int;

100 = int
100u = unsigned
100.0 = double
100.0f = float
于 2012-08-29T21:09:19.803 回答
1

int / int = int. 即使您将结果存储在双精度中,结果也会在它变成双精度之前被截断。

double stateTax = price / 100 * stateTaxRate;
与: 相同
double = int / int * int,这意味着结果将是一个 int 然后存储在 double 中。

尝试将 100 写为 100.0。或者你可以把你的整数变成双精度或浮点数。

于 2012-08-29T20:31:03.017 回答
1

您期望从计算中得到小数 - 浮点 - 结果,但它们都使用整数值,因此您将丢失小数部分。

例如,在此计算中:double stateTax = price / 100 * stateTaxRate;,price/100最终将为零。由于这是整数除法,因此小数部分被截断。

您需要强制进行浮点计算。这是一种方法(请注意,它使用100.0而不是100):

double stateTax = price / 100.0 * stateTaxRate;

或者,因为price是计算的根,所以将其声明为double

double price = 52.0;
于 2012-08-29T20:04:50.310 回答
1

将变量的类型从 更改intdouble

整数变量使编译器使用整数运算符,而整数除法运算符 (/) 会截断结果。那是你的问题。

(price / 100) * taxprice / (100 * tax)(无论编译器首先要评估哪个)都将返回 0。

于 2012-08-29T20:09:01.183 回答