1. 程式人生 > >iOS 處理伺服器返回的浮點數資料

iOS 處理伺服器返回的浮點數資料

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轉元處理。