iOS 浮點數精確計算 資料處理

2021-08-27 05:17:11 字數 1854 閱讀 1778

有時候我們需要精確計算小數,比如精確計算金額,或者需要高精度計算一些數值等,使用系統預設的float,double,cgfloat等型別計算是不準確的。

我們需要使用系統提供的類nsdecimalnumber進行計算。

// 精確小數點計算

nsstring *num1 = @"1.99999999999";

nsstring *num2 = @"0.00000000001";

nsstring *num3 = @"0.00000001234";

nsstring *num4 = @"1.23456789876";

// 建立nsdecimalnumber物件

nsdecimalnumber *number1 = [nsdecimalnumber decimalnumberwithstring:num1];

nsdecimalnumber *number2 = [nsdecimalnumber decimalnumberwithstring:num2];

nsdecimalnumber *number3 = [nsdecimalnumber decimalnumberwithstring:num3];

nsdecimalnumber *number4 = [nsdecimalnumber decimalnumberwithstring:num4];

// 減

nsdecimalnumber *subnum = [number1 decimalnumberbysubtracting:number2];

nslog(@"%@ - %@ = %@", number1.stringvalue, number2.stringvalue, subnum.stringvalue);

// 加

nsdecimalnumber *sumnum = [number2 decimalnumberbyadding:number3];

nslog(@"%@ + %@ = %@", number2.stringvalue, number3.stringvalue, sumnum.stringvalue);

// 乘

nsdecimalnumber *multinum = [number4 decimalnumberbymultiplyingby:number2];

nslog(@"%@ * %@ = %@", number4.stringvalue, number2.stringvalue, multinum.stringvalue);

// 除 nsdecimalnumber *dividnum = [number4 decimalnumberbydividingby:number2];

nslog(@"%@ / %@ = %@", number4.stringvalue, number2.stringvalue, dividnum.stringvalue);

得到的結果

2015-12-10 23:30:10.106 test[3245:79623] 

1.99999999999 - 0.00000000001 = 1.99999999998

2015-12-10 23:30:10.107 test[3245:79623]

0.00000000001 + 0.00000001234 = 0.00000001235

2015-12-10 23:30:10.107 test[3245:79623]

1.23456789876 * 0.00000000001 = 0.0000000000123456789876

2015-12-10 23:30:22.250 test[3245:79623]

1.23456789876 / 0.00000000001 = 123456789876

PHP浮點數的精確計算BCMath

php bcmath bc是binary calculator的縮寫。bc 函式的引數都是運算元加上乙個可選的 int scale 比如string bcadd string lef tope rand str ingleftoperand,string right operand int scal...

js 浮點數計算精確度不準確的解決方案

12 1.2 14.4 得到14.3999999 0.1 0.2 0.3 得到0.30000000000000004 為什麼會這樣呢?原來js在計算浮點數時會先把浮點數轉換成二進位制,其中會出現誤差,相加完再轉換乘十進位制時又會出現誤差,吧啦吧啦吧啦,大概是這個原因吧,不重要,重要的是解決方案,下面...

浮點數資料誤差eps處理(詳細解析)

眾所周知,c和c 中,經常用到的浮點數型別無論是float型別還是double型別都存在一定的精度與誤差,關於float與double所表示的範圍如下 double的精度足夠日常使用,但是浮點數在計算機內部儲存的時候存在的誤差值是不可避免的,比如說數字5在計算機中儲存的資料根據運算方式的不同,結果可...