1. 程式人生 > >iOS NSDecimalNumber精確數值計算以及小數點後精確保留2位數字

iOS NSDecimalNumber精確數值計算以及小數點後精確保留2位數字

遇到的問題,從伺服器拿的資料NSString型別的,然後轉化成CGFloat型別的,資料的值就不準確了,沒辦法,就找了下資料,找到了蘋果有專門的API,針對金融貨幣單位,希望可以解決有遇到同樣問題的人.

NSDecimalNumberHandler *roundUp = [NSDecimalNumberHandler

                                       decimalNumberHandlerWithRoundingMode:NSRoundBankers

                                       scale:2

                                       raiseOnExactness:NO

                                       raiseOnOverflow:NO

                                       raiseOnUnderflow:NO

                                       raiseOnDivideByZero:YES];

列舉

    NSRoundPlain,   // Round up on a tie //貌似取整 

    NSRoundDown,    // Always down == truncate  //只舍不入

    NSRoundUp,      // Always up    // 只入不捨

    NSRoundBankers  // on a tie round so last digit is even  貌似四捨五入

    //90.7049+0.22 然後四捨五入

    NSDecimalNumber *subtotal = [NSDecimalNumberdecimalNumberWithString:@"90.7049"];

    NSDecimalNumber *discount = [NSDecimalNumberdecimalNumberWithString:@"0.22"];

    NSDecimalNumber *total = [subtotal decimalNumberByAdding:discount withBehavior:roundUp];

    NSLog(@"Rounded total: %@", total);

NSDecimalNumber*price1 = [NSDecimalNumberdecimalNumberWithString:@"15.99"];

NSDecimalNumber*price2 = [NSDecimalNumberdecimalNumberWithString:@"29.99"];

NSDecimalNumber*coupon = [NSDecimalNumberdecimalNumberWithString:@"5.00"];

NSDecimalNumber*discount = [NSDecimalNumberdecimalNumberWithString:@".90"];

NSDecimalNumber*numProducts = [NSDecimalNumberdecimalNumberWithString:@"2.0"];

NSDecimalNumber *subtotal = [price1 decimalNumberByAdding:price2];

NSDecimalNumber *afterCoupon = [subtotal decimalNumberBySubtracting:coupon];

NSDecimalNumber *afterDiscount = [afterCoupon decimalNumberByMultiplyingBy:discount];

NSDecimalNumber *average = [afterDiscount decimalNumberByDividingBy:numProducts];

NSDecimalNumber*averageSquared = [average decimalNumberByRaisingToPower:2];

的NSLog(@“小計:%@”,加);/ / 45.98

 的NSLog(@“優惠券後:%@”,減);/ / 40.98

 的NSLog((@“折後:%@”),乘);/ / 36.882

 的NSLog(@“每股平均價產品:%@”,平均);/ / 18.441

 的NSLog(@“平均價的平方:%@”,averageSquared);/ / 340.070481

//保留小數點後兩位

NSDecimalNumberHandler*roundUp = [NSDecimalNumberHandler

                                   decimalNumberHandlerWithRoundingMode:NSRoundUp

                                   scale:2

                                   raiseOnExactness:NO

                                   raiseOnOverflow:NO

                                   raiseOnUnderflow:NO

                                   raiseOnDivideByZero:YES];

//9折後 36.882 有餘進位結果 36.89

NSDecimalNumber*subtotal = [NSDecimalNumberdecimalNumberWithString:@"40.98"];

NSDecimalNumber*discount = [NSDecimalNumberdecimalNumberWithString:@".90"];

NSDecimalNumber*total = [subtotal decimalNumberByMultiplyingBy:discount

                                                   withBehavior:roundUp];

NSLog(@"Rounded total: %@", total);

//比較大小

NSDecimalNumber*discount1 = [NSDecimalNumberdecimalNumberWithString:@".85"];

NSDecimalNumber*discount2 = [NSDecimalNumberdecimalNumberWithString:@".9"];

NSComparisonResult result = [discount1 compare:discount2];

if (result ==NSOrderedAscending) {

    NSLog(@"85%% < 90%%小於");

} else if (result == NSOrderedSame) {

    NSLog(@"85%% == 90%%等於");

} elseif (result ==NSOrderedDescending) {

    NSLog(@"85%% > 90%%大於");

相關推薦

iOS NSDecimalNumber精確數值計算以及小數點精確保留2數字

遇到的問題,從伺服器拿的資料NSString型別的,然後轉化成CGFloat型別的,資料的值就不準確了,沒辦法,就找了下資料,找到了蘋果有專門的API,針對金融貨幣單位,希望可以解決有遇到同樣問題的人. NSDecimalNumberHandler *roundUp =

數值強制顯示小數點4

field return 小數 snippet local oca fields cal class ajax調用方式: $.each(data.RESULTSET,function(i,ele){ ele.MTUR_Y

SQL Server 數值四舍五入,小數點保留2

小數 設置 報錯 ref lec numeric server article 原因 1.round() 函數是四舍五入用,第一個參數是我們要被操作的數據,第二個參數是設置我們四舍五入之後小數點後顯示幾位。 2.numeric 函數的2個參數,第一個表示數據長度,第二個參數

計算pi小數點10000

資料結構課上,老師讓我們計算一下pi的10000位,複習一下面向物件。 **First Try:**定義一個高精度類hp(high precision),實現加減乘除,輸入輸出,然後隨便找一個公式,比如Wallis公式,全都用hp進行計算。 **現實是:**

C語言 輸入一個小數,輸出它的立方。輸出保留小數點2數字

c //輸入一個小數,輸出它的立方。輸出保留小數點後的2位數字。 #include <stdio.h> int main(int argc, const char * argv[]) { double i,t; printf("輸入一個小數:\n"); scanf("%lf

小數點保留2小數的正則表達式

如果 知識 兩位小數 位數 3.1 斜杠 字符串 第一步 {} 一、前提   整數和小數,保留兩位小數的正則表達式:   具體什麽意思呢  ^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,2})?$ 二、知識點   1、首先從寫法上可以看出

angularJs控制input只能輸入數字並且小數點只能輸入兩

在使用angular開發webapp的時候有時候需要input只能輸入數字,並且小數點只能是一個,小數點後只能輸入兩位小數; 在瀏覽器上我們可以使用onkeypress使用正則表示式來實現這樣的需求,

c# 控制TextBox只能輸入小數(只能輸入一個小數點,小數點只能輸入兩,第一不能是小數點

/// <summary> /// 價格和數量輸入控制(只能輸入一個小數點,小數點後只能輸入兩位,第一位不能是小數點) /// </summary> /// <param name="e">

edittext只能輸入數字小數點,且小數點只能輸入兩

1.在edittext的xml中輸入屬性 android:inputType="numberDecimal" 2.在edittext的監聽中 et_dollar.addTextChangedLi

梁勇(Danniel Liang) java教材例題:java程序購買額按稅率求營業稅 java中數值保留2小數的方法

can margin package ann pack ati sea static rate package com.swift; import java.util.Scanner; public class PurchaseTaxDecimalsTwo { public

JS 保留2小數 四舍五入(小數點後面不足2,自動用0補齊)

sna change ima var 不足 保留 art turn ring function changeTwoDecimal_f(x) { var f_x = parseFloat(x); if (isNaN(f_x)) { alert(‘fu

保留小數點保留2小數,如:2,會在2後面補上00.即2.00

function toDecimal2(x) {       var f = parseFloat(x);       if (isNaN(f)) {   

輸入兩個整數m和n,及另一個整數k,計算m/n,結果精確小數點k

#include<stdio.h> int main() { int m,n,k,i; printf("Please input integer m , n and k\n"); scanf("%d%d%d",&m,&n,&k); pri

Python計算開方、立方、圓周率,精確小數點任意

Python計算的位數 在電腦上做了一個實驗,看看python能計算到多少位,一下是結果。 x = math.sqrt((3)) print ("%.53f"%(x)) print ("%.63f"%(x)) print ("%.83f"%(x)) 1

計算圓周率 Pi (π)值, 精確小數點 10000 (C語言)

Pi=03.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812

【java】java處理隨機浮點數(小數點)用RMB的大寫數值規則輸出

pen junit toc get code package 部分 amp print 晚上上床前,拿到這個有意思的問題,就想玩弄一番: ====================================================================

iOS中UITextField輸入判斷小數點

draw tab 字符 index har 位數 body keyword tst 在輸入金額的UITextField中,要給予三個規則的判斷 1. 只能輸入數字(可以通過設置鍵盤類型為Decimal Pad) 2. 小數點只能有一個 3. 小數點後最多有兩位數字 (可以通

mysql的時間戳timestamp精確小數點

bsp 秒級 pan 圖片 行數據 .com png sta style 1、mysql的時間戳timestamp精確到小數點後六位。 公司業務使用到Greenplun數據庫,根據查詢的時間戳來不斷的將每個時間段之間的數據,進行數據交換,但是今天發現,mysql的時間戳沒

ios稽核4.3,以及掉坑的感想

首先,感謝蘋果 好了,進入主題 itunesconnect.apple關於4.3的被拒回覆: Guideline 4.3 - Design Your app duplicates the content and functionality of apps

js---數字精確小數點

傳入的引數可以是任意型別,如果不符合條件,則轉換輸出的數字為:0.00 function toDecimal2 (num) { var result = '0.00'; if(num) { var f = Math.round(parseFloat(num) * 10