最近一個(gè)IOS項(xiàng)目中需要用到很多小數(shù)計(jì)算,對(duì)精度要求很高。我們都知道,對(duì)計(jì)算機(jī)而言Float,Double這類浮點(diǎn)數(shù)因?yàn)槎际且钥茖W(xué)計(jì)數(shù)法方式存儲(chǔ),所以都存在著計(jì)算上的誤差,所以不能直接對(duì)它們進(jìn)行相關(guān)計(jì)算。
創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的大連網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
在每種語(yǔ)言中都有相應(yīng)的高精度計(jì)算方式,如Java中得BigDecimal類,C#中的decimal類型都是用來(lái)解決高精度計(jì)算問(wèn)題的,如貨幣計(jì)算。
在對(duì)蘋(píng)果給出的API進(jìn)行查看后,發(fā)現(xiàn)了一個(gè)類-----NSDecimalNumber
下面我們就來(lái)看看它里面我們需要的方法定義:
- decimalNumberByAdding:
- decimalNumberBySubtracting:
- decimalNumberByMultiplyingBy:
- decimalNumberByDividingBy:
以上4個(gè)方法分別代表著我們四則運(yùn)算中得加減乘除。
這樣應(yīng)該很好理解如何進(jìn)行我們的高精度計(jì)算了,以下為我寫(xiě)的用于理解的例子,addendValue和augendValue為NSString類型,可以將需要運(yùn)算的數(shù)字轉(zhuǎn)化成相應(yīng)位數(shù)的NSString類型后進(jìn)行高精度計(jì)算:
NSDecimalNumber *addendNumber = [NSDecimalNumber decimalNumberWithString:addendValue]; NSDecimalNumber *augendNumber = [NSDecimalNumber decimalNumberWithString:augendValue]; NSDecimalNumber *sumNumber = [addendNumber decimalNumberByAdding:augendNumber];