我有一个iPhone应用程序。我在我的sqlite3数据库中存储了一个浮点值(距离)。(数据库中的字段被格式化为浮点型)我能够在数据库中正确地存储浮点值,没有问题。然而,我似乎想不出如何将值从db格式中提取出来并正确地表示出来。下面是我的代码,用于从我的数据库中提取值并使用它:
NSString *itemDistance = [NSString stringWithFormat:@"%f",[item distance]];
float questionDistance = [itemDistance floatValue];
项目距离是一个浮点值。我不能让这个起作用。取而代之的是一个非常长的值。我做错了什么?任何帮助都将不胜感激。
提前感谢你的帮助,
L.
发布于 2009-09-03 19:30:52
假设你的-distance方法返回了正确的值,那么这听起来就像是对C语言中浮点数的工作原理的基本误解。每个开发人员至少落入这种陷阱一次。
浮点数实际上只能表示相当有限数量的值。具体地说,除非您碰巧选择了一个可以精确表示为浮点数的值,否则您将获得最接近的值,该值通常有许多小数位数据。
这样做的原因是因为浮点数只有32位;4个字节。现在,在0..1000000或0..1000或偶数0..1之间有多少个带小数点的数字。无限的。浮点数实现了可能数值的一个非常有限的子集,并且以这样的方式实现,其中得到的可能值可能有许多小数位。
考虑一下:
printf("%5.18f\n", (float) 2.05);
printf("%5.18f\n", (float) 2.45);
printf("%5.18f\n", (float) 4200.75);
printf("%5.18f\n", (float) 37.89);
printf("%5.18f\n", (float) 1.2);
printf("%5.18f\n", (float) -1.2);
这将打印:
2.049999952316284180
2.450000047683715820
4200.750000000000000000
37.889999389648437500
1.200000047683715820
-1.200000047683715820
这些值与浮点数可以表示的代码位中的值非常接近。
如果您需要更高的精度,请使用double。比这更精确吗?使用NSDecimalNumber。
并且,如果可以的话,使用CoreData。这使得管理这类事情变得更加简单。
发布于 2011-08-09 13:14:13
为什么要绕圈子呢?
NSString *itemDistance = [NSString stringWithFormat:@"%.2f",[item distance]];
float questionDistance = [itemDistance floatValue];
.2说我想要两位小数。
发布于 2009-09-03 18:46:03
距离的类型是什么?如果它是NSNumber的一个实例,那么我认为你写的代码不会起作用,试试
NSString *itemDistance = [[item distance] stringValue];
float questionDistance = [itemDistance floatValue];
甚至是
float q=[[item distance] floatValue];
https://stackoverflow.com/questions/1376926
复制相似问题