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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請問如何用C表示貨幣或金錢

請問如何用C表示貨幣或金錢

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

3 回答

?
叮當(dāng)貓咪

TA貢獻(xiàn)1776條經(jīng)驗 獲得超12個贊

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

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


查看完整回答
反對 回復(fù) 2019-12-28
?
翻閱古今

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

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


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


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


二進制浮點數(shù):2個常見的陷阱:1)使用float它經(jīng)常精度不足,并且2)舍入不正確。double對于許多會計限制,使用井解決了問題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)。一個重要的優(yōu)點是能夠通過使用round()本身滿足特殊情況的函數(shù)來簡單地四舍五入。


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


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


結(jié)論這是一個很深的主題,每種方法都應(yīng)該進行更廣泛的討論。普遍的答案是:沒有通用的解決方案,因為所有方法都有明顯的弱點。因此,這取決于應(yīng)用程序的細(xì)節(jié)。


[編輯]

給定OP的其他編輯,建議使用double最小貨幣單位的編號(例如:$ 0.01-> double money = 1.0;)。每當(dāng)需要精確值時,請在代碼中的各個位置使用round()。


double interest_in_cents = round(

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

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



查看完整回答
反對 回復(fù) 2019-12-28
?
LEATH

TA貢獻(xiàn)1936條經(jīng)驗 獲得超7個贊

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


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


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


struct money {

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

  int frac_dollar; 

};                          

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


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


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



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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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