Ios 具有代表性编号(.0)的NSNumber不是NSString格式

Ios 具有代表性编号(.0)的NSNumber不是NSString格式,ios,nsnumber,Ios,Nsnumber,大家好, 我正在使用一个私有API,我需要发送整数值和双数值 对于整数,我没有任何问题,我将整数转换为NSNumber,一切正常 但是对于没有十进制数字的double(例如46),我的请求被拒绝,因为服务器看到一个整数,其中应该有一个double 我的系统管理员告诉我发送带有“.0”的双精度值,所以如果我想发送双精度46,我必须发送46.0 问题是我不能发送NSString,或者服务器也会拒绝我的请求(它会看到一个字符串,其中应该有一个双精度字符) 所以我的问题是:有没有一种方法可以将代表性数字

大家好,

我正在使用一个私有API,我需要发送整数值和双数值

对于整数,我没有任何问题,我将整数转换为NSNumber,一切正常

但是对于没有十进制数字的double(例如46),我的请求被拒绝,因为服务器看到一个整数,其中应该有一个double

我的系统管理员告诉我发送带有“.0”的双精度值,所以如果我想发送双精度46,我必须发送46.0

问题是我不能发送NSString,或者服务器也会拒绝我的请求(它会看到一个字符串,其中应该有一个双精度字符)

所以我的问题是:有没有一种方法可以将代表性数字添加到NSN数字中?所以我的双46应该是NS46.0

有人能帮我吗


提前感谢。

当您初始化NSNumber时,您应该使用它

mynumber = [NSNumber numberWithDouble: myDoublevalue];
当您想将其发送到服务器时,请尝试

[mynumber doubleValue];

我想问题是:你用什么来创建你的NSNumber

使用

NSNumber *intNumber = @(46);
将给您一个包含
int
NSNumber
,而

NSNumber *doubleNumber = [NSNumber numberWithDouble:46];
应导致一个
NSNumber
包含一个
double

(您可以通过调用
[intNumber objCType]
来检查这一点,它将给出“i”,而
[doubleNumber objCType
将给出“d”)

您可能遇到的另一个问题是,您(或您使用的API)使用一些格式转换为JSON或其他格式

普通的JSON转换器将忽略
.0
,因此可能会出现错误

因此,如果您可以访问JSON(或者您使用的任何其他格式转换,因为您永远不会向任何服务器发送NSNumber),您可以在那里修复它

最后一点,如果以上两点没有任何帮助,您可以考虑添加一个非常小的数字,这将强制一个点,但在正常情况下不会有太大的区别:

input = pow(2,log2(fabs(input))-50) //use 20 instead of 50 for float numbers!
NSNumber *result = @(input);

尝试设置NSNumber的精度您使用的是什么技术?尚不清楚
NSNumber
s如何工作,原语类型如何工作。顺便说一句,服务器实现已中断。您所说的“技术”是什么意思?只需添加,将
46.0
double
转换为
NSNumber numberwhithdouble
应自动忽略
.0
而只留下
46
。这与@I'L'L有什么关系?仍然numberwhithdouble将导致与使用@(46)不同的ObjType或者是数字。我建议的那个会导致“d”变为“I”这实际上是Alexandre的问题!这就是问题所在事实上,我在完成
NSNumber numberWithDouble
后试图发送它,但服务器随后看到一个INT,您如何发送它?您是调用objc框架的方法还是调用http api?对于http api,您可以使用我的第二个建议,对于framework您可能必须使用第三个“dirty”option@NilsZiehn当前位置与问题Nils有关,这就是问题所在。问题是:我需要在字典中添加该值,而这不可能与double@Alexandre你的意思是什么?你是使用NSDictionary还是其他一些字典实现?添加int t也是不可能的o NSNumber字典。只有NSNumber。如果您使用NSNumber字典,则不关心其中的数字。是的,很抱歉,我没有很好地解释自己。我使用的是NSNumber字典,我在其中存储NSNumber。但是如果我存储
mynumber=[NSNumber numberWithDouble:myDoublevalue];
其中
myDoublevalue=63
则服务器看到的是int而不是double