[英]Best way to handle handle input for money in c++?
所以我在 c++ 中制作了一個基本的銀行程序,並有一筆存款 function 接受雙精度,所以我想處理來自用戶的雙精度輸入,該雙精度作為貨幣有效,因此到小數點后 2 位且不少於 0。
go 關於這個的最佳方法是什么? 到目前為止我有這個,還有什么我需要檢查貨幣驗證或可以用更少的代碼行完成的任何事情嗎? 謝謝
// allow user to deposit funds into an account
try{
double amount = std::stoi(userInput); // userInput is a string
if (amount < 0)
{
throw std::invalid_argument("Amount cannot be negative");
}
// call function to deposit
std::cout << "You have deposited " << amount << " into your account." << std::endl;
}
catch(std::invalid_argument){
std::cout << "Invalid input." << std::endl;
}
你不應該使用雙精度或浮點數來存儲這些類型的信息。 原因是浮點數和雙精度數並不像看起來那么准確。
這是 0.1 在二進制中的樣子:
>>> 0.1
0.0001100110011001100110011001100110011001100110011...
這是一個如何將 0.1 存儲在浮點數中的示例。 這是由於刪除了...11001100...的無限小數位造成的,因為我們無法存儲它們的所有(無限個):
0.1000000000000000055511151231257827021181583404541015625
所以每個浮點數或雙精度數根本不准確。 乍一看,我們看不到這一點(因為不准確度非常小 - 對於某些類型的利用),但問題可能會累積 - 如果我們對這些數字進行數學運算。
銀行程序正是這種程序類型,它會導致問題。
我可能會創建一個結構:
struct Amount {
int dollars;
int cents;
void recalculate() {
dollars += cents / 100;
cents = cents % 100;
}
};
每次需要時, recalculate() function 會將整數轉換為“人類如何閱讀它”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.