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

首頁 > 系統 > iOS > 正文

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

2019-10-21 18:41:37
字體:
來源:轉載
供稿:網友

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];}

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


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产91在线播放九色快色| 国产精品av在线| 亚洲一区亚洲二区| 少妇高潮久久久久久潘金莲| 日本精品中文字幕| 北条麻妃一区二区三区中文字幕| 日韩精品在线私人| 91精品视频播放| 亚洲一级片在线看| 欧美精品生活片| 日韩亚洲成人av在线| 91香蕉嫩草影院入口| 成人免费观看49www在线观看| 亚洲xxxxx性| 久久久久久18| 久久亚洲精品一区| 91精品国产91久久| 成人午夜一级二级三级| 国产成人极品视频| 国产精品日韩久久久久| 日本久久久久亚洲中字幕| 国产精品久久久久久久一区探花| 亚洲自拍偷拍区| 97久久超碰福利国产精品…| 蜜月aⅴ免费一区二区三区| 亚洲欧美成人精品| 超碰精品一区二区三区乱码| 欧美有码在线视频| 国产午夜精品久久久| 国产精品户外野外| 欧美视频在线看| 91精品久久久久久久久青青| 欧美成人手机在线| 国产精品免费观看在线| 国产精品黄色av| 国产精品白丝jk喷水视频一区| 亚洲国产精品va| 亚洲国产成人一区| 91精品国产九九九久久久亚洲| 亚洲亚裔videos黑人hd| 91网站在线免费观看| 日韩电影免费观看在线观看| 国产一区二区三区视频在线观看| 成人乱人伦精品视频在线观看| 国产精品91一区| 日韩欧美亚洲综合| 国外成人在线直播| 久久韩剧网电视剧| 久久久中文字幕| 色妞一区二区三区| 精品国产视频在线| 久久精品国产清自在天天线| 国产亚洲精品久久久久动| 国产精品99久久久久久www| 久久伊人91精品综合网站| 色婷婷综合成人| 亚洲国产美女精品久久久久∴| 欧美大奶子在线| 欧美精品制服第一页| 国内精品400部情侣激情| 亚洲欧美日韩国产成人| 欧美亚洲在线播放| 国产精品男女猛烈高潮激情| 国产成+人+综合+亚洲欧洲| 最新日韩中文字幕| 欧美一级片一区| 91av免费观看91av精品在线| 在线精品高清中文字幕| 欧美精品videosex性欧美| 孩xxxx性bbbb欧美| 久久影院免费观看| 欧美午夜片欧美片在线观看| 97超碰色婷婷| 精品在线观看国产| 久久视频在线看| 精品国产一区二区三区久久久| 亚洲欧美国产视频| 欧美日韩精品二区| 68精品国产免费久久久久久婷婷| 亚洲白虎美女被爆操| 欧美成人免费小视频| 国产亚洲精品久久久久动| 欧美野外猛男的大粗鳮| 久久久免费高清电视剧观看| 久久精品99国产精品酒店日本| 日韩在线播放av| 97精品久久久中文字幕免费| 亚洲www永久成人夜色| 日韩国产在线看| 久久中文字幕国产| 亚洲免费av网址| 日韩中文字幕国产| 综合网中文字幕| 国产精品视频色| 国产精品小说在线| 欧美最近摘花xxxx摘花| 一区二区三区高清国产| 欧美www视频在线观看| 91精品久久久久久久久久久久久久| 97视频com| 欧美性感美女h网站在线观看免费| 久久久久久网站| 亚洲人成网7777777国产| 日韩av大片免费看| 国产日韩欧美中文| 久久久久免费精品国产| 欧美激情综合色| 日韩欧美在线免费观看| 岛国精品视频在线播放| 欧美成人午夜影院| 亚洲最新av在线网站| 国产精品久久久久久影视| 亚洲第一免费播放区| 国产精品91视频| 色偷偷91综合久久噜噜| 91地址最新发布| 91精品国产91久久| 国产精品久久久久久中文字| 欧美激情一区二区三区久久久| 国产精品偷伦一区二区| 亚洲欧美日本精品| 欧美孕妇孕交黑巨大网站| 日韩欧美在线视频日韩欧美在线视频| 亚洲综合色激情五月| 国内外成人免费激情在线视频| 亚洲色图国产精品| 亚洲精品国产拍免费91在线| 性欧美视频videos6一9| 亚洲精品一区二区三区不| 日韩精品极品在线观看播放免费视频| 亚洲国产精品资源| 成人国产在线激情| 日韩精品在线免费| 精品亚洲一区二区三区在线观看| 欧美理论电影在线观看| 国产精品国产亚洲伊人久久| 欧美日韩激情视频8区| 91夜夜揉人人捏人人添红杏| 66m—66摸成人免费视频| 久久精品国产v日韩v亚洲| 97精品视频在线| xxav国产精品美女主播| 久久久久在线观看| 国产主播欧美精品| 色99之美女主播在线视频| 操人视频在线观看欧美| 国产精品影院在线观看| 色综合视频一区中文字幕| 国产亚洲欧美aaaa| 91色精品视频在线| 日韩欧美在线字幕| 国产精品一区av| 美女国内精品自产拍在线播放| 91精品中文在线| 亚洲伦理中文字幕| 欧美日韩美女在线| 亚洲最大成人网色| 久久久久久久一区二区三区| 精品久久久久久久久久久久久| 欧美视频在线看| 欧美成人免费网| 91亚洲精品久久久| 在线播放精品一区二区三区| 最近2019年中文视频免费在线观看|