在C++中将cout与变量一起使用时出错

Error using cout with variables in C++

本文关键字:出错 一起 变量 C++ 中将 cout      更新时间:2023-10-16

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

您正在进行整数除法。

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

正在对进行评估

 price / 100

结果为0。

在C++中,一个整数除以另一个整数不会产生浮点数。相反,它会截断(即删除)你希望在"."后面看到的所有内容。它不知道在你评估的表达式的最内部,最终所有内容都会变成双精度。

将变量更改为doubles,则会得到不同的结果。

您的输入是整数,方程的设置方式也会将结果"视为"整数。例如(简化以理解要点):

int price = 52;
double stateTax = price / 100;

stateTax将为0,因为52/100=0.52作为一个int,它被截断为0。

使price在计算中加倍,得到预期结果:

int price = 52;
double stateTax = (double)price / 100;

因为52.0/100=0.52作为双精度。

double stateTax = price / 100 * stateTaxRate;

其中价格为intprice / 100为0。使用

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

在其他情况下也是如此。

price/100当price=52为0时。如果你把价格提高一倍,你就会得到你想要的。

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

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

将变量的类型从int更改为double

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

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

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

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

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

double stateTax = price / 100.0 * stateTaxRate;

或者,由于price是计算的根,因此将其声明为double:

double price = 52.0;

只需将100更改为100.0对我们来说,这是一样的,但有了额外的.0C++就会知道它是双倍的,你想要双倍的结果。

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

int + int = int;
int + double = double;
short int + int = int;
100 = int
100u = unsigned
100.0 = double
100.0f = float

int / int = int。即使您将结果存储在double中,结果在进入double之前也会被截断。

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

试着把100写成100.0。或者,您可以将int转换为double或float。