我有一个字符串:61146009 [从服务器发送]
但是当我打印其浮动值
时[string floatValue];
输出为61146008.000000。我也试过将字符串发送为61146009.0,但结果仍然相同。
知道为什么吗?
字符串需要使用
显示为61,146,009NSString *formattedScore = [numberFormatter stringFromNumber: [NSNumber numberWithFloat: [scoreString floatValue]]];
这是由其他人编写的一行代码,他们似乎错误地使用了float而不是int
我知道使用[string intValue]可以轻松修复它。但不幸的是,代码与[string floatValue]一起使用,我试图解决问题,而不必发布新的更新。
感谢任何帮助。感谢。
答案 0 :(得分:3)
使用double,而不是float。 Float大约有7个十进制数字。
答案 1 :(得分:3)
如果服务器发送字符串“61146009”,则其中一个为真:
我列出2的原因是61146009不能表示为IEEE 754单精度值。如您所见,最接近的可表示值是61146008.如果服务器有61146008并转换为生成61146009的字符串,则其格式化例程很糟糕,应该修复或替换。您的修复方法是更改服务器将数字转换为字符串的方式。
在1的情况下,服务器具有无法在float(IEEE 754单精度对象)中表示的数字。这使得客户端无法将它们存储在浮点数中。由于您不想更改客户端,因此您必须更改服务器永远不要发送无法在float中表示的值。一种方法是修改服务器以将其值转换为单精度,然后发送它。转换将双精度值四舍五入为单精度可表示的值。
3的情况类似于1:服务器的数字无法在浮点数中表示,您需要进行类似的转换。
鉴于您所描述的内容,我不认为您可以发送任何可能导致未修改的客户端显示61146009的值。
答案 2 :(得分:2)
此数字在单精度浮点数中无法表示
在十六进制中,它是0x3A50399,因此需要26位,比Float尾数中的24位多两位。
因此,您将最接近的浮点数输入到小数输入。
答案 3 :(得分:0)
你试过了吗?
[NSString stringWithFormat:@"%.0f",string]