iOS 處理伺服器返回的浮點數資料
阿新 • • 發佈:2019-02-18
iOS開發遇到的一個問題:
對伺服器返回的價格資料,直接轉為字串儲存展示,伺服器轉過來的價格 如9.89,儲存為字串之後 變為了9.890000000000001。
處理過程為:
伺服器返回的json 資料 為 responseString = {“code”:200000,”msg”:”ok”,”data”:[{“id”:34,”name”:”補胎”,”serviceParts”:[],”timeFeePrice”:9.89,”timeFeeOriginalPrice”:50.0}]}
我們看到json 資料裡面 浮點資料 timeFeePrice = 9.89
responseObject = [NSJSONSerialization JSONObjectWithData:data options:self.readingOptions error:&serializationError];
經過系統json 轉化為 NSDictionary* responseObject 後,列印responseObject 為
code = 200000;
data = (
{
id = 34;
name = "\U8865\U80ce";
serviceParts = (
);
timeFeeOriginalPrice = 50;
timeFeePrice = "9.890000000000001";
}
);
msg = ok;
我們看到打印出來的 timeFeePrice = “9.890000000000001”;
因為 十進位制數字“9.89”不能完全代表一個二進位制浮點數等float或double。所以“舍入浮9.89”沒有意義,因為沒有完全等於9.89浮動。
你只能指定一個精度將浮點數轉換為十進位制輸出字串。您可以使用一個NSNumberFormatter或printf-format像”%.f
所以處理伺服器返回的浮點數資料時,需要設定小數點位數。
價格資料處理,建議伺服器統一使用分作為單位,傳整形價格資料過來,客戶端統一%100轉元處理。