具有用於設計的一美元的價值輸入轉換成其可能的構成部分中的程序浮子/ INT計算麻煩。例如,如果您輸入$ 1234.56,程序會輸出 「1個$ 1000個法案,2個$ 100大鈔,1個$ 20法案,1頁$ 10的法案,4 $ 4美元的鈔票,2個季度,1鎳,和1分。」印刷值int對於一個簡單的計算(值不相加)
最大的問題出現與計算便士。如果用戶輸入$ .03,則輸出會有所不同(有時,我得到3美分;其他時間,我得到2美分)。我想我已經解決了這個問題,現在,但我想知道爲什麼我解決它,更重要的是我想解決根本的問題:沿計算流的地方,編譯器會出現在「刮掉」值(例如.01變成0.009999)。是因爲我正在對同一個變量進行遞歸計算,即「數量」?有沒有更乾淨的方式來做我想在這裏做的事情? (我有限切換/選擇是否陳述,沒有用的功能,並且不使用陣列。)
鏈接到全碼here。
#include <stdio.h>
int main(){
float amount, bill_quarter_f, bill_dime_f, bill_nickel_f, bill_penny_f;
int bill_quarter, bill_dime, bill_nickel, bill_penny;
printf("Ex 5.15: Translating Decimal Dollar into Coins\n");
printf("==============================================\n\n");
printf("Enter your amount (e.g .98): $ ");
scanf("%f", &amount);
/************************************/
/* Calculation for greater than MAX */
/************************************/
if (amount >= 1)
printf("\nYou have too much money!\n\n");
/************************************/
/* Calculation for Coins */
/************************************/
else if(amount < 1 && amount > 0){
bill_quarter = amount/.25;
bill_quarter_f = amount/.25;
amount = ((bill_quarter_f - bill_quarter) * .25);
(bill_quarter >= 1 && bill_quarter < 4) ? (printf("You have %d quarters\n", bill_quarter)) : (printf(""));
bill_dime = amount/.10;
bill_dime_f = amount/.10;
amount = (bill_dime_f - bill_dime) * .10;
(bill_dime >= 1 && bill_dime <= 2) ? (printf("You have %d dimes\n", bill_dime)) : (printf(""));
bill_nickel = amount/.05;
bill_nickel_f = amount/.05;
amount = (bill_nickel_f - bill_nickel) * .05;
(bill_nickel >= 1 && bill_nickel < 2) ? (printf("You have %d nickel\n", bill_nickel)) : (printf(""));
bill_penny = amount/.01;
bill_penny_f = amount/.01;
amount = (bill_penny_f - bill_penny) * .01;
(bill_penny_f > 0 && bill_penny_f < 5) ? (printf("You have %.0f pennies\n", bill_penny_f)) : (printf(""));
}
else if (amount == 0)
printf("You have no money!\n");
else
printf("You are in debt!\n");
return 0;
}
使用定點運算的貨幣種類;浮點是完全不合適的(二進制浮點尤其如此)。 –
@TobySpeight貨幣類型的定點算法也有其弱點。 「浮點數完全不合適」 - >十進制浮點數很大 - 除了缺乏支持。無論採取何種路線,它都是一種折衷。 – chux
@chux,我從來沒有嘗試十進制浮點數的錢;我寧願將這些指數數字用於實際值,而不是用於縮放(以及在意外時間改變(絕對)精度)。但是如果你有經驗,我很想聽聽它是如何工作的,也許是在某個地方的答案? –