2011-09-09 40 views
0

我有以下构造,我想简化。我不得不使用NSString(?)来摆脱NSNumber与NSDecimalNumber编译器的警告。简化NSDecimalNumber初始化

NSDecimalNumber *ticksSinceSeventies = [NSDecimalNumber decimalNumberWithString:[NSString stringWithFormat:@"%d",[self timeIntervalSince1970]]];

感谢您的帮助!

+1

我知道这并不完全回答你的问题,但你为什么要在NSDecimalNumber中存储一个double(NSTimeInteval) NSNumber适合双打。 NSNumber * ticksSinceSeventies = [NSNumber numberWithDouble:[self timeIntervalSince1970]]; –

+1

丹是正确的。 NSDecimalNumber的用途是用于精确的基10算术。由于您正在处理NSTimeIntervals,因此假设您正在处理日期,并且有一个涉及[日历计算]的整个文档(http://developer.apple.com/library/ios/#documentation/Cocoa/ Conceptual/DatesAndTimes/Articles/dtCalendricalCalculations.html) – Abizern

+0

@Daniel你们应该发表一个答案,否则我不可能解决这个问题,你不会得到它的道具:-) – Besi

回答

2

如果您只使用NSTimeInterval s,这是双打,那么NSDecimalNumber所提供的10进制算术并不是真的需要。您可以改用NSNumber。因此

你的构造也只是:

NSNumber *ticksSinceSeventies = [NSNumber numberWithDouble:[self timeIntervalSince1970]]; 

(假设自为NSDate亚类中,或者这是一种类方法内侧)。

0

这里有一种方法:

[NSDecimalNumber decimalNumberWithString:[[self timeIntervalSince1970] stringValue]]; 

有很多方法可以简化仍然更好,但我不知道。

+0

这是行不通的:'typedef double NSTimeInterval;'因此stringValue不起作用 – Besi

+0

我以为你的timeIntervalSince1970是在NSNumber,当你读到你的“NSNumber VS NSDecimalNumber编译器警告”。 – Saran

+0

不够公平......我在尝试使用NSInteger之前得到了此编译器警告。 – Besi