亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

詳解iOS之關于double/float數據計算精度問題

2020-07-26 02:29:42
字體:
來源:轉載
供稿:網友

1、我們的app有一個判斷,當用戶輸入的值,小于等于剩余的余額時,給用戶彈窗,代碼不往下執行

當用戶輸入 0.01 時,po 一下的結果是:0.10000.... ,當用戶的余額是0.01時,po一下網絡請求的返回結果是:0.009999...

當用戶輸入 66.05時,po  一下的結果是:66.049999...,當用戶的余額是66.05時,po一下網絡請求的返回結果是:66.049999...

所以,當數據較大時,不會有影響,因為用戶輸入的數據和網絡返回數據都被變成了不精確的小值了;但是,當數據較小時,用戶輸入的數據沒有被轉,網絡返回的數據被轉成了不精確的小值,導致用戶輸入永遠大于網絡返回的數據,代碼無法往下執行;

解決:使用 NSDecimalNumber 將float、double數據轉化成NSDecimalNumber 類型的對象進行 +、-、*、/計算,再取值。

- (double)DecimalNumber:(double)num1 num2:(double)num2 {      NSDecimalNumber *n1 = [NSDecimalNumber decimalNumberWithString:[NSString stringWithFormat:@"%f",num1]];      NSDecimalNumber *n2 = [NSDecimalNumber decimalNumberWithString:[NSString stringWithFormat:@"%f",num2]];      NSDecimalNumber *n3 = [n1 decimalNumberBySubtracting:n2];      return n3.doubleValue; } // 調用: double result = [self DecimalNumber: 2.01 num2: 2]; // 結果為 0.01 

其中:
decimalNumberBySubtracting: n1 - n2,返回 n1 - n2 的結果值
decimalNumberByMultiplyingBy:n1 * n2,
decimalNumberByDividingBy:n1 / n2,
decimalNumberByAdding:n1 + n2,
compare:比較 n1 和 n2,返回比較結果;

2、進行數據的四舍五入獲得結果 

- (NSString*)Rounding:(float)number afterPoint:(NSInteger)position {   NSDecimalNumberHandler *handler = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode: NSRoundPlain scale: position raiseOnExactness: NO raiseOnOverflow: NO raiseOnUnderflow:NO raiseOnDivideByZero: NO];      NSDecimalNumber *floatDecimal = [[NSDecimalNumber alloc] initWithFloat: number];      NSDecimalNumber *resultNumber = [floatDecimal decimalNumberByRoundingAccordingToBehavior:handler];      return [NSString stringWithFormat:@"%@",resultNumber]; } // 調用: NSString *result = [self Rounding:8.00092 afterPoint:3]; // 結果為 8.001 

其中,參數number是需要四舍五入的數據,position是小數點后保留的位數;

高精度要求

使用系統提供的NSDecimalNumber API進行計算,最后轉換為字符串輸出顯示。NSDecimalNumber轉換方法:

#import "NSDecimalNumber+Y_Add.h"@implementation NSDecimalNumber (Y_Add)+ (NSDecimalNumber *)y_decimalNumberWithFloat:(float)value{    return [self y_decimalNumberWithFloat:value scale:2];}+ (NSDecimalNumber *)y_decimalNumberWithFloat:(float)value scale:(short)scale{    return [self y_decimalNumberWithFloat:value roundingMode:NSRoundBankers scale:scale];}+ (NSDecimalNumber *)y_decimalNumberWithFloat:(float)value roundingMode:(NSRoundingMode)roundingMode scale:(short)scale{    return [[[NSDecimalNumber alloc] initWithFloat:value] y_decimalNumberHandlerWithRoundingMode:roundingMode scale:scale];}+ (NSDecimalNumber *)y_decimalNumberWithDouble:(double)value{    return [self y_decimalNumberWithDouble:value scale:2];}+ (NSDecimalNumber *)y_decimalNumberWithDouble:(double)value scale:(short)scale{    return [self y_decimalNumberWithDouble:value roundingMode:NSRoundBankers scale:scale];}+ (NSDecimalNumber *)y_decimalNumberWithDouble:(double)value roundingMode:(NSRoundingMode)roundingMode scale:(short)scale{    return [[[NSDecimalNumber alloc] initWithFloat:value] y_decimalNumberHandlerWithRoundingMode:roundingMode scale:scale];} /** * <#Description#> * * @return <#return value description#> */- (NSDecimalNumber *)y_decimalNumberHandler{    return [self y_decimalNumberHandlerWithRoundingMode:NSRoundBankers scale:2];}- (NSDecimalNumber *)y_decimalNumberHandlerWithRoundingMode:(NSRoundingMode)roundingMode scale:(short)scale{   NSDecimalNumberHandler *handler = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:roundingMode                                               scale:scale                                         raiseOnExactness:NO                                          raiseOnOverflow:YES                                         raiseOnUnderflow:YES                                        raiseOnDivideByZero:YES];  return [self decimalNumberByRoundingAccordingToBehavior:handler];}@end

普通精度要求

使用系統提供的數學運算進行計算,最后轉換為字符串輸出顯示。保留小數點后N位的方法:

/** * formatterNumber .00 小數點后兩位 * * @param number <#number description#> * * @return <#return value description#> */+ (NSString *)y_formatterNumber:(NSNumber *)number{    return [self y_formatterNumber:number fractionDigits:2];}+ (NSString *)y_formatterNumber:(NSNumber *)number fractionDigits:(NSUInteger)fractionDigits{      NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];  [numberFormatter setMaximumFractionDigits:fractionDigits];  [numberFormatter setMinimumFractionDigits:fractionDigits];    return [numberFormatter stringFromNumber:number];}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产精品成人一区二区| 成人午夜在线视频一区| 91在线看www| 成人福利在线视频| 欧美老女人性视频| 久久999免费视频| 国产精品久久久久久网站| 久久久国产影院| 欧美电影在线观看完整版| 最近2019好看的中文字幕免费| 国产做受69高潮| 九九九热精品免费视频观看网站| 操人视频在线观看欧美| 亚洲一二在线观看| 久久影院模特热| 高跟丝袜一区二区三区| 亚洲精品日韩欧美| 国产精品扒开腿做爽爽爽视频| 欧美激情精品在线| 国产精品一区二区三| 精品少妇v888av| 成人在线视频网站| 日韩国产在线播放| 精品久久久中文| 欧美性猛交xxxx免费看| xvideos亚洲| 日韩精品高清在线| 亚洲新中文字幕| 欧美一区二三区| 欧美高清视频在线| 日本国产高清不卡| www.久久久久久.com| 欧美电影免费播放| 欧美色道久久88综合亚洲精品| 疯狂做受xxxx高潮欧美日本| 欧美中文字幕视频在线观看| 亚洲欧洲一区二区三区在线观看| 中文字幕欧美视频在线| 亚洲国产97在线精品一区| 久久久久久久一区二区| 久久精品久久久久久| 粗暴蹂躏中文一区二区三区| 国产精品久久久久久av福利软件| 日韩中文字幕在线观看| 亚洲精品第一页| 亚洲第一精品夜夜躁人人躁| 日韩在线免费av| 国产欧美日韩专区发布| 国产99久久精品一区二区永久免费| 欧美精品久久久久久久| 日韩欧美精品免费在线| 欧美老女人性视频| 久久人人看视频| 久久国产精品偷| 在线精品91av| 久久久久久一区二区三区| 亚洲一区二区少妇| 欧美成人免费va影院高清| 日本久久中文字幕| 国产精品白丝av嫩草影院| 国产视频精品自拍| 奇门遁甲1982国语版免费观看高清| 一个人看的www欧美| 国产精品视频一| 久久全球大尺度高清视频| 久久精品免费播放| 97在线看免费观看视频在线观看| 欧美在线一级va免费观看| 97精品国产aⅴ7777| 国产精品视频最多的网站| 欧美国产日韩一区| 日韩免费中文字幕| 欧美日韩国产一区在线| 国产精品香蕉国产| 2019亚洲男人天堂| 亚洲欧美日韩一区二区三区在线| 亚洲欧美日韩中文在线制服| 日本久久久久亚洲中字幕| 日韩中文在线视频| 国产精品久久综合av爱欲tv| 亚洲一级免费视频| 欧美风情在线观看| 深夜福利亚洲导航| 久久天天躁狠狠躁夜夜躁2014| 久久精品亚洲一区| 亚洲免费福利视频| 日韩av在线资源| 亚洲欧美国产va在线影院| 日韩最新在线视频| 午夜精品www| 91精品国产高清久久久久久| 国产丝袜高跟一区| 亚洲精品720p| 久久久久久国产精品| 日韩免费精品视频| 亚洲第一av在线| 欧美有码在线观看| 国产欧美一区二区三区视频| 九色91av视频| 亚洲精品美女久久久| 国产69久久精品成人| 亚洲a级在线观看| 久久最新资源网| 亚洲999一在线观看www| 中文字幕亚洲欧美日韩在线不卡| 日韩中文字幕视频在线观看| 国产成人精品一区二区| 亚洲第一福利在线观看| xvideos国产精品| 国产成人一区二区三区| 国产自产女人91一区在线观看| 欧美日韩性视频在线| 久热精品视频在线观看一区| 2019中文字幕全在线观看| 国产精品爱啪在线线免费观看| 国产精品999999| 性欧美办公室18xxxxhd| 欧美色欧美亚洲高清在线视频| 久久久精品欧美| 国产一区私人高清影院| 精品伊人久久97| 国产女同一区二区| 欧美激情网站在线观看| 日韩中文字幕在线看| 国产一区二区日韩精品欧美精品| 国产精品女视频| 日本久久久a级免费| 日韩欧美一区二区三区| 最近2019中文字幕mv免费看| 欧美日韩国产中文精品字幕自在自线| 日韩av网址在线| 欧美精品18videos性欧| 久久视频在线观看免费| 亚洲va欧美va国产综合剧情| 欧美极品少妇xxxxⅹ裸体艺术| 91久久精品久久国产性色也91| 国产成人久久久| 亚洲男人天堂网站| 亚洲综合中文字幕在线| 97婷婷大伊香蕉精品视频| 欧美极品少妇xxxxⅹ裸体艺术| 日韩精品在线免费| 国产精品自拍视频| 国产精品69久久久久| 国语自产精品视频在线看一大j8| 欧美性色视频在线| 一区二区三欧美| 日韩暖暖在线视频| 成人性生交大片免费观看嘿嘿视频| 日韩电影中文字幕在线| 亚洲国产精品视频在线观看| 欧美肥臀大乳一区二区免费视频| 亚洲国产精品高清久久久| 日产精品久久久一区二区福利| 国产精品成人av在线| 91精品国产成人www| 国产日韩精品在线| 欧美夫妻性视频| 中文字幕亚洲一区二区三区五十路| 欧美精品亚州精品| 国产在线观看91精品一区| 国产精品成人va在线观看| 91精品国产91久久久久| 欧美另类精品xxxx孕妇|