第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何用C表示貨幣或金錢

如何用C表示貨幣或金錢

C
寶慕林4294392 2019-12-05 15:13:11
簡(jiǎn)化假設(shè):假定基于x86或x64的體系結(jié)構(gòu),但請(qǐng)指出可能影響基于RISC的體系結(jié)構(gòu)的任何假設(shè),例如Power芯片或Arm芯片。計(jì)算精度是首要要求。 易于維護(hù)將是下一個(gè)要求。計(jì)算速度很重要,但比其他要求高。計(jì)算需要能夠安全地支持操作精確到工廠以及配套值范圍達(dá)萬(wàn)億(10 ^ 9)與其他問題的區(qū)別:如上所述,以前已經(jīng)針對(duì)其他多種語(yǔ)言提出了此類問題。這個(gè)問題與其他問題有所不同,原因有兩個(gè)。使用以下來(lái)源接受的答案:為什么不使用Double或Float代表貨幣?,讓我們重點(diǎn)介紹它們之間的差異。(解決方案1)幾乎可以在任何語(yǔ)言下工作的解決方案是改用整數(shù),并計(jì)算分。例如,1025為$ 10.25。幾種語(yǔ)言還具有內(nèi)置類型來(lái)處理金錢。(解決方案2)除其他外,Java具有BigDecimal類,而C#具有十進(jìn)制類型。重點(diǎn)強(qiáng)調(diào)了兩個(gè)建議的解決方案第一種解決方案本質(zhì)上是“定點(diǎn)”方法的一種變體。該解決方案存在一個(gè)問題,即建議的范圍(跟蹤分)不足以進(jìn)行基于軋機(jī)的計(jì)算,并且舍入會(huì)丟失大量信息。另一種解決方案是使用decimal在C中不可用的本機(jī)類。同樣,答案不考慮其他選項(xiàng),例如創(chuàng)建用于處理這些計(jì)算的結(jié)構(gòu)或使用任意精度庫(kù)。這些差異是可以理解的,因?yàn)镴ava沒有結(jié)構(gòu),為什么在語(yǔ)言中有本機(jī)支持的情況下為什么還要考慮第三方庫(kù)。這個(gè)問題不同于該問題和其他相關(guān)問題,因?yàn)镃沒有相同級(jí)別的本機(jī)類型支持,并且具有其他語(yǔ)言沒有的語(yǔ)言功能。而且我還沒有看到其他任何問題可以解決在C語(yǔ)言中可以采用的多種方法。問題:根據(jù)我的研究,float由于浮點(diǎn)錯(cuò)誤,似乎不適合用于在C程序中表示貨幣的數(shù)據(jù)類型。我應(yīng)該用什么來(lái)用C表示金錢,為什么這種方法比其他方法更好?
查看完整描述

3 回答

?
慕后森

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊

使用整數(shù)數(shù)據(jù)類型(long long,long,int)或BCD(二進(jìn)制編碼的十進(jìn)制)算術(shù)庫(kù)。您應(yīng)存儲(chǔ)將顯示的最小數(shù)量的十分之一或百分之一。就是說(shuō),如果您使用美元并以美分(百分之一美元)表示,則您的數(shù)值應(yīng)為代表毫或毫的整數(shù)(十分之一或百分之一)。額外的重要數(shù)字將確保您的興趣和類似的計(jì)算始終如一。

如果使用整數(shù)類型,請(qǐng)確保其范圍足夠大以處理關(guān)注的數(shù)量。


查看完整回答
反對(duì) 回復(fù) 2019-12-05
?
四季花海

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超5個(gè)贊

最好的貨幣/貨幣表示形式是使用諸如doublehas 那樣的精度更高的浮點(diǎn)類型FLT_RADIX == 10。這些平臺(tái)/編譯器是罕見的,因?yàn)榻^大多數(shù)系統(tǒng)都有FLT_RADIX == 2。


四種選擇:整數(shù),非十進(jìn)制浮點(diǎn)數(shù),特殊十進(jìn)制浮點(diǎn)數(shù),用戶定義的結(jié)構(gòu)。


整數(shù):常見的解決方案是使用所選貨幣的最小面額的整數(shù)計(jì)數(shù)。以美分代替美元為例。整數(shù)的范圍必須合理地寬。喜歡的東西long long,而不是int因?yàn)閕nt只能處理大約+/- $ 320.00。這對(duì)于涉及加/減/復(fù)數(shù)的簡(jiǎn)單會(huì)計(jì)任務(wù)效果很好,但是開始會(huì)被除以利息計(jì)算中的除法和復(fù)雜函數(shù)。每月付款方式。有符號(hào)整數(shù)數(shù)學(xué)運(yùn)算沒有溢出保護(hù)。四舍五入結(jié)果時(shí)應(yīng)加倍小心。 q = (a + b/2)/b還不夠好。


二進(jìn)制浮點(diǎn)數(shù):2個(gè)常見的陷阱:1)使用float它經(jīng)常精度不足,并且2)舍入不正確。double對(duì)于許多會(huì)計(jì)限制,使用井解決了問題1。然而,代碼仍然經(jīng)常需要使用四舍五入到所需的最小貨幣單位以獲得令人滿意的結(jié)果。


// Sample - does not properly meet nuanced corner cases.

double RoundToNearestCents(double dollar) {

  return round(dollar * 100.0)/100.0;

}

一種變化double是使用double最小單位的數(shù)量(0.01或0.001)。一個(gè)重要的優(yōu)點(diǎn)是能夠通過使用round()本身滿足特殊情況的函數(shù)來(lái)簡(jiǎn)單地四舍五入。


特別十進(jìn)制浮點(diǎn) 某些系統(tǒng)提供了一個(gè)“小數(shù)”類型以外的其他double符合 DECIMAL64或類似的東西。盡管這可以解決上述大多數(shù)問題,但是卻犧牲了可移植性。


用戶定義的結(jié)構(gòu)(如定點(diǎn))當(dāng)然可以解決所有問題,只是它很容易出錯(cuò),并且很容易工作(取而代之)。結(jié)果可能會(huì)完美運(yùn)行,但缺乏性能。


結(jié)論這是一個(gè)很深的主題,每種方法都應(yīng)該進(jìn)行更廣泛的討論。普遍的答案是:沒有通用的解決方案,因?yàn)樗蟹椒ǘ加忻黠@的弱點(diǎn)。因此,這取決于應(yīng)用程序的細(xì)節(jié)。


[編輯]

給定OP的其他編輯,建議使用double最小貨幣單位的編號(hào)(例如:$ 0.01-> double money = 1.0;)。每當(dāng)需要精確值時(shí),請(qǐng)?jiān)诖a中的各個(gè)位置使用round()。


double interest_in_cents = round(

    Monthly_payment(0.07/12 /* percent */, N_payments, principal_in_cents));

我的水晶球說(shuō),到2022年,美國(guó)將下降0.01美元,最小單位為0.05美元。我將使用能夠最好地應(yīng)對(duì)這一轉(zhuǎn)變的方法。


查看完整回答
反對(duì) 回復(fù) 2019-12-05
?
胡說(shuō)叔叔

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超8個(gè)贊

如果速度是您的首要考慮因素,那么請(qǐng)使用按比例縮放到您需要代表的最小單位的整數(shù)類型(例如,磨機(jī),它是0.001美元或0.1美分)。因此,123456代表$123.456。


這種方法的問題是數(shù)字可能用完了。一個(gè)32位無(wú)符號(hào)int可以表示10個(gè)十進(jìn)制數(shù)字,因此在此方案下您可以表示的最大值為$9,999,999.999。如果您需要處理數(shù)十億美元的價(jià)值,那就不好了。


另一種方法是使用結(jié)構(gòu)類型,其中一個(gè)整數(shù)成員代表整個(gè)美元金額,另一個(gè)整數(shù)成員代表小數(shù)美元金額(同樣,縮放為您需要代表的最小單位,無(wú)論是美分,米爾斯還是其他較小),類似于timeval在一個(gè)字段中節(jié)省整秒,而在另一字段中節(jié)省納秒的結(jié)構(gòu):


struct money {

  long whole_dollars; // long long if you have it and you need it

  int frac_dollar; 

};                          

一個(gè)int是更比寬足以應(yīng)付任何縮放理智的人會(huì)使用。如果該whole_dollars部分為0,則保留它的簽名。


如果您更擔(dān)心存儲(chǔ)任意大的值,那么總是有BCD,它可以表示比任何本機(jī)整數(shù)或浮點(diǎn)類型更多的數(shù)字。


不過,代表制只是成功的一半。您還必須能夠?qū)@些類型執(zhí)行算術(shù)運(yùn)算,并且對(duì)貨幣的運(yùn)算可能具有非常特定的舍入規(guī)則。因此,在決定自己的代表時(shí),您需要考慮這一點(diǎn)。


查看完整回答
反對(duì) 回復(fù) 2019-12-05
  • 3 回答
  • 0 關(guān)注
  • 1026 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)