floatValue 失真

開發(fā)遇到的一個坑。在與后臺交互的時候,協(xié)議規(guī)定的數(shù)據(jù)類型是浮點型歉糜,這就要求我們將用戶輸入的字符串轉化為float類型。但是在轉化過程中會出現(xiàn)失真的情況望众。
其實float與str互轉會出現(xiàn)失真的情況匪补,原因很簡單。這是因為浮點數(shù)的存儲方式的緣故烂翰。

    NSLog(@"%f",[@"20.5" floatValue]);
    NSLog(@"%f",[@"20.7" floatValue]);
    NSLog(@"%f",[@"20.75" floatValue]);
    NSLog(@"%f",[@"20.76" floatValue]);
    NSLog(@"%f",[@"20.875" floatValue]);
    NSLog(@"%f",[@"20.878" floatValue]);
    NSLog(@"%f",[@"20.09375" floatValue]);
    NSLog(@"%f",[@"20.09335" floatValue]);
    NSLog(@"%f",[@"20.546875" floatValue]);
    NSLog(@"%f",[@"20.546878" floatValue]);

2018-08-25 11:21:58.833098+0800 floatValueDistortion[3523:408253] 20.500000
2018-08-25 11:21:58.833285+0800 floatValueDistortion[3523:408253] 20.700001
2018-08-25 11:21:58.833401+0800 floatValueDistortion[3523:408253] 20.750000
2018-08-25 11:21:58.833520+0800 floatValueDistortion[3523:408253] 20.760000
2018-08-25 11:21:58.833623+0800 floatValueDistortion[3523:408253] 20.875000
2018-08-25 11:21:58.834162+0800 floatValueDistortion[3523:408253] 20.878000
2018-08-25 11:21:58.834477+0800 floatValueDistortion[3523:408253] 20.093750
2018-08-25 11:21:58.834636+0800 floatValueDistortion[3523:408253] 20.093349
2018-08-25 11:21:58.834784+0800 floatValueDistortion[3523:408253] 20.546875
2018-08-25 11:21:58.834978+0800 floatValueDistortion[3523:408253] 20.546879

在回顧了浮點數(shù)的存儲方式之后夯缺,和后臺商議使用更改數(shù)據(jù)類型為字符串進行傳輸,問題就解決了甘耿。但是如果要用輸入的類型進行計算呢踊兜?這個時候問題就避不開了。
其實蘋果已有線程的API是可以支持的佳恬。NSDecimalNumber看定義就可以發(fā)現(xiàn)捏境,不同于浮點數(shù)的存儲,他是十進制的毁葱。同時也可以定制精度的取正類型:向上取正垫言、向下去正、四舍五入等倾剿。相對與浮點類型的計算骏掀,NSDecimalNumber提供了更加精準的計算。

NSDecimalNumber
An object for representing and performing arithmetic on base-10 numbers.
- (void)caculateTest
{
    NSString * floatStr1 =@"14.326";
    NSString * floatStr2 =@"7.54";
    
    NSDecimalNumber * num1 = [NSDecimalNumber decimalNumberWithString:floatStr1];
    NSDecimalNumber * num2 = [NSDecimalNumber decimalNumberWithString:floatStr2];

    NSDecimalNumber *num3 = [num1 decimalNumberByAdding:num2];
    CGFloat float3 = [floatStr1 floatValue] + [floatStr2 floatValue];
    NSLog(@"%@,%f",num3,float3);
    
    NSDecimalNumber *num4 = [num1 decimalNumberBySubtracting:num2];
    CGFloat float4 = [floatStr1 floatValue] - [floatStr2 floatValue];
    NSLog(@"%@,%f",num4,float4);

    NSDecimalNumber *num5 = [num1 decimalNumberByMultiplyingBy:num2];
    CGFloat float5 = [floatStr1 floatValue] * [floatStr2 floatValue];
    NSLog(@"%@,%f",num5,float5);

    NSDecimalNumber *num6 = [num1 decimalNumberByDividingBy:num2];
    CGFloat float6 = [floatStr1 floatValue] / [floatStr2 floatValue];
    NSLog(@"%@,%f",num6,float6);
}

floatValueDistortion[3897:448522] 21.866,21.866001
2018-08-25 12:31:09.503985+0800 floatValueDistortion[3897:448522] 6.786,6.786000
2018-08-25 12:31:09.504800+0800 floatValueDistortion[3897:448522] 108.01804,108.018044
2018-08-25 12:31:09.504993+0800 floatValueDistortion[3897:448522] 1.9,1.900000

Demo地址

浮點數(shù)在計算機中存儲方式
iOS開發(fā)筆記之四十二——一個double精度導致的bug

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末柱告,一起剝皮案震驚了整個濱河市截驮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌际度,老刑警劉巖葵袭,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異乖菱,居然都是意外死亡坡锡,警方通過查閱死者的電腦和手機蓬网,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鹉勒,“玉大人帆锋,你說我怎么就攤上這事∏荻睿” “怎么了锯厢?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長脯倒。 經(jīng)常有香客問我实辑,道長,這世上最難降的妖魔是什么藻丢? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任剪撬,我火速辦了婚禮,結果婚禮上悠反,老公的妹妹穿的比我還像新娘残黑。我一直安慰自己,他們只是感情好斋否,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布梨水。 她就那樣靜靜地躺著,像睡著了一般如叼。 火紅的嫁衣襯著肌膚如雪冰木。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天笼恰,我揣著相機與錄音踊沸,去河邊找鬼。 笑死社证,一個胖子當著我的面吹牛逼龟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播追葡,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼腺律,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了宜肉?” 一聲冷哼從身側響起匀钧,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谬返,沒想到半個月后之斯,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡遣铝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年佑刷,在試婚紗的時候發(fā)現(xiàn)自己被綠了莉擒。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡瘫絮,死狀恐怖涨冀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情麦萤,我是刑警寧澤鹿鳖,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站频鉴,受9級特大地震影響栓辜,放射性物質(zhì)發(fā)生泄漏恋拍。R本人自食惡果不足惜垛孔,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望施敢。 院中可真熱鬧周荐,春花似錦、人聲如沸僵娃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽默怨。三九已至讯榕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間匙睹,已是汗流浹背愚屁。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留痕檬,地道東北人霎槐。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像梦谜,于是被迫代替她去往敵國和親丘跌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 1.現(xiàn)象: 因APP業(yè)務需要唁桩,從后臺端取得軌跡點的string闭树,包含一千及以上個經(jīng)緯度坐標點,數(shù)值精度為小數(shù)點后六...
    Masazumi柒閱讀 2,241評論 0 0
  • iOS開發(fā)中荒澡,接受后臺的響應报辱,把json然后轉化為模型對象,最終轉化為NSString對象仰猖。 后臺返回的一個數(shù)字(...
    海邊漫步的我閱讀 1,886評論 0 4
  • 一捏肢、Java 簡介 Java是由Sun Microsystems公司于1995年5月推出的Java面向對象程序設計...
    子非魚_t_閱讀 4,154評論 1 44
  • 同級別標簽對齊奈籽; 嵌套標簽縮進 2 個空格; 選擇器和 “{” 之間加個空格鸵赫; 屬性名稱: 屬性值 之間的冒號...
    輝夜乀閱讀 253評論 0 0
  • 【寫在前面的絮絮叨叨】 - 文梗來源于平行宇宙的解釋衣屏,其實沒有什么關系,只是突然腦洞大開有了這個莫名其妙的文梗辩棒,總...
    Grey夏閱讀 8,969評論 3 34