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++では浮動小数点数にはなりません。代わりに、「。」の後に表示されると予想されるすべてのものを切り捨てます(つまり削除します)。評価している式の最も内側のポイントで、最終的にすべてが2倍になることはわかりません。

変数をdoubleに変更すると、異なる結果が得られます。

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

price / 100ここで、価格はint0です。使用

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

そして他の場合にも。

于 2012-08-29T20:03:43.160 に答える
2

価格=52が0の場合の価格/100。価格を2倍に変更すると、必要なものが得られます。

于 2012-08-29T20:04:38.290 に答える
2

入力は整数であり、方程式は結果も整数として「扱われる」ように設定されます。例(要点を理解するために簡略化):

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

stateTax0に切り捨てられるintとして52/100=0.52であるため、0になります。

期待priceされる結果を得るには、計算を2倍にします。

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

int / int = int。結果をdoubleに格納している場合でも、結果がdoubleになる前に結果が切り捨てられます。

double stateTax = price / 100 * stateTaxRate;
は:と同じです
double = int / int * int。これは、結果がintになり、doubleに格納されることを意味します。

100を100.0と書いてみてください。または、intをdoubleまたはfloatにすることもできます。

于 2012-08-29T20:31:03.017 に答える
1

計算から小数(浮動小数点)の結果を期待していますが、それらはすべて整数値を使用しているため、小数部分が失われます。

たとえば、この計算では:double stateTax = price / 100 * stateTaxRate;price/100はゼロになります。これは整数除算であるため、小数部分は切り捨てられます。

浮動小数点計算を強制する必要があります。これが1つの方法です(では100.0なくを使用することに注意してください100):

double stateTax = price / 100.0 * stateTaxRate;

または、priceは計算のルートにあるため、次のように宣言しますdouble

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

変数のタイプをからintに変更しますdouble

整数変数を使用すると、コンパイラは整数演算子を使用し、整数除算演算子(/)は結果を切り捨てます。それはあなたの問題だ。

(price / 100) * taxまたはprice / (100 * tax)(コンパイラが最初に評価したい方)は両方とも0を返します。

于 2012-08-29T20:09:01.183 に答える
1

To usに変更100するだけでも同じですが、追加のC ++を使用すると、それが2倍であり、2倍の結果が必要であることがわかります。100.0.0

なんで?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 に答える