2011-09-09 70 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