在C++中将cout与变量一起使用时出错
Error using cout with variables in 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 << " ";
}
您正在进行整数除法。
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;
其中价格为int
的price / 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) * tax
或price / (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
对我们来说,这是一样的,但有了额外的.0
C++就会知道它是双倍的,你想要双倍的结果。
为什么?当计算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。
- 访问者访问变体并返回不同类型时出错
- 在Linux for Windows上编译C++代码时出错
- 尝试将指针与结构一起使用时出错
- 将运算符<<与隐式转换的非基本数据类型一起使用时出错
- 将外部C++库与 CMake 一起使用时出错
- 将 find_if() 与数组一起使用的代码段中出错
- 可能的 GCC 链接器错误会导致将弱符号和局部符号链接在一起时出错
- OpenGL 将来自 ttf 的渲染器文本与背景纹理组合在一起时出错
- 将 argv 与函数一起使用时出错
- 将calcOpticalFlowPyrLK与OpenCV 2.3.1一起使用时出错
- 在C++中将cout与变量一起使用时出错
- 将lower_bound与矢量<对<字符串、双精度一起使用时出错>>
- 将cvMinMaxLoc与IplImage一起使用时出错
- 将"using namespace boost::numeric::ublas;"与 stl 矢量一起使用时出错
- 将 boost::spirit::qi::p hrase_parse() 与 qi::grammar 一起使用时出错
- 在C++中一起编译源文件和头文件时出错
- "Numeric value out of range" 将 SQLFetch() 与 SQL_C_FLOAT 一起使用时出错
- 与矢量大小一起使用时,for 循环中出错
- 在Visual Studio 2010(utility.obj)中将QuickFix与VC++一起使用时出错
- 将unique_ptr与成员函数指针一起使用时出错