我正在用字典创建Connection
对象,如下所示,
字典:
NSData
price = 106
{
channelId = 201;
lang = EN;
reqRefNo = vZRIzNd;
storeInfo = {
clientInfo = {
deviceId = XXXXXXXXA67F488B836D19D80EC4FD8D;
};
loginLogId = XXXXXXXX5CAD4A0DA06BE2F055929856;
qrCodeInfo = {
itemDesc = "";
itemName = hahsj;
price = 106;
};
userInfo = {
storeId = 3252;
};
};
}
现在我再次将其转换回JSON对象,如下所示,
NSData *data = [NSJSONSerialization dataWithJSONObject:paramDict options:kNilOptions error:nil];
但这次我的价格错了。
转换字典
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:data
options:kNilOptions
error:&error];
price =" 105.9999923706055"
生成NSNumber的代码,
{
channelId = 201;
lang = EN;
reqRefNo = vZRIzNd;
storeInfo = {
clientInfo = {
deviceId = XXXXXXXXA67F488B836D19D80EC4FD8D;
};
loginLogId = XXXXXXXX5CAD4A0DA06BE2F055929856;
qrCodeInfo = {
itemDesc = "";
itemName = hahsj;
price = "105.9999923706055";
};
userInfo = {
storeId = 3252;
};
};
}
任何人都可以解释一下这背后的原因吗?感谢。
答案 0 :(得分:2)
这是一个浮点精度问题。使用double
代替float
。
您的号码以二进制格式存储,无法准确表示所有十进制值,因此某些值会“舍入”到最接近的二进制值。打印数字时,它会将您的浮动转换为双倍,然后打印。转换为double将使您的舍入二进制表示和存储具有更高的精度,使其具有高精度和低精度内容。打印此图将显示使用浮动精度时的近似值。
NSString *amount = [_amountTF.text stringByReplacingOccurrencesOfString:@"S$" withString:@""];
double amt = [amount doubleValue];
amt *=100;
NSNumber *num = [NSNumber numberWithDouble:amt];
答案 1 :(得分:0)
同时。创建字典添加价格值:
price = [NSString stringWithFormat:@“ 106”]; 要么, int priceValue = 106; 价格= [NSString stringWithFormat:@“%d”,priceValue];
现在已转换字典。随您便。