在C double和Cocoa的NSDecimalNumber之间转换?

Mik*_*ell 5 cocoa cocoa-touch objective-c

我正在将我用Java编写的算法转换为Objective-C.在java中,BigDecimal类处理基数为10的数字,并且可以将原始double作为构造函数arg.但是,在Cocoa的NSDecimalNumber类中,没有使用基本double构造实例的直接方法.

目前我正在使用这个(臭臭)黑客:

    [NSDecimalNumber decimalNumberWithString:[NSString stringWithFormat:@"%1.38f", number]];
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

Chu*_*uck 15

NSNumber是NSDecimalNumber的超类,它有一个+ numberWithDouble:方法.那正是你想要的.

  • @Danny Tuppeny:我刚试过这个,你似乎错了.我做了`[[NSDecimalNumber numberWithDouble:12.7] class]`并找回了NSDecimalNumber.您在其他评论中引用的错误是Cocoa AFAICT中的静态输入错误.动态类型很好并且正常工作.`numberWithDouble:`只存在于NSNumber上的事实是无关紧要的,因为它只调用`[[[self alloc] initWithDouble:double] autorelease]`,而`self`就是收到消息的类.这是基本的继承 - 类可以继承父级的便利构造函数. (3认同)

Ech*_*lon 5

你也可以使用[[NSDecimalNumber alloc] initWithDouble:(double)],它不是那么明显.