我正在通過一門C++課程,並被要求分別製作一個帶有美元和美分變化的簡單收銀程序。我在減去cpp整數時丟失了一個數字
這樣做,我遇到了一個例子,如果我cout
我的cout<<change*100 - dollars*100<<endl;
的計算正確得到40美分。
但是,當我設置INT cents = change * 100 - dollars * 100;
然後cout<<cents<<endl;
我得到39
這是因爲我使用有一個我不知道的一些意想不到的後果中的數據類型?這裏是整個程序:
#include <iostream>
using namespace std;
int main()
{
double price, paymentAmount, change;
int dollars, cents;
price = 23.00;
paymentAmount = 24.40;
cout<<"total: "<<price<<endl;
cout<<"paid: "<<paymentAmount<<endl;
change = paymentAmount-price;
dollars = change; // implicit conversion from double -> int
cents = change * 100 - dollars * 100;
cout<<"dollars: "<<dollars<<endl;
cout<<"cents: "<<change*100 - dollars*100<<endl; // outputs 40
cout<<"cents: "<<cents<<endl; // outputs 39
return 0;
}
感謝您的幫助
編輯:
原來這是來自轉換雙爲int,其截斷小數。我的號碼是39.99999,但在轉換爲int時被截斷爲39。我認爲轉換方面使得這是一個非重複問題
的[是浮點運算壞了嗎?(可能的複製https://stackoverflow.com/questions/588004/is-floating-point-math-broken驗證) –
爲了將來的參考,在處理金錢時不要使用標準浮點類型和算術運算。簡單的初學者練習可能就足夠了,但一旦你成爲初學者,就不要這樣做。 –
將貨幣保存爲整數/長整數的長整數,以避免信息丟失,這是由於浮點格式使用大數字或週期性分(由於1/10或1/100無法準確存儲在二進制firmat中)所造成的。 – cmdLP