2012-01-18 90 views
0

我有幾個雙倍數值...... 35.44,35.66。我需要四捨五入,結果應該是NSNumber。結果應該是35.4,35.7。那麼該怎麼做?再一次,結果應該是NSNumber,而不是NSString!iPhone:圓形雙倍數值

回答

3

劃分你可以將其打印到一個字符串,並使用格式字符串到它夾到一個小數點。

NSString *stringRepresentation = [NSString stringWithFormat:@"%.1f", myDouble]; 
NSNumber *number = [NSNumber numberWithDouble:[stringRepresentation doubleValue]]; 
+0

而且沒有另一種方式,而不轉化 – Jim 2012-01-18 15:54:36

+0

+1涵蓋四捨五入,並且不會導致任何溢出:) – matm 2012-01-18 19:57:48

0

乘以10,使用舍入函數來剝離小數,然後通過10

0
NSNumber *myNumber = [NSNumber numberWithInt:myDouble]; 

NSNumber *myNumber = [NSNumber numberWithInt:(int)myDouble]; 

編輯: 我誤解了原來的問題,我想您想雙重存儲在一個NSNumber一個整數值。

爲了回答這些問題,正確的,另一種選擇是一個臨時INT:

double myDouble = 1.23; 
int myInt = myDouble * 10; 
myDouble = (double)myInt ; 
myDouble /= 10; 
NSNumber *myNumber = [NSNumber numberWithDouble:myDouble]; 

您可能會更好只是儲存的雙發中的NSNumber,但並四捨五入當你在以後檢索。

編輯2:

一個更精簡的版本是:

double myDouble = 1.23; 
myDouble = (int)(myDouble * 10); 
NSNumber *myNumber = [NSNumber numberWithDouble:myDouble/10]; 

它可能會更好不必創建一個臨時的NSString ......恕我直言

+0

如果'(double)myInt'大於'MAXINT',會發生什麼? – 2012-01-18 17:32:03

+0

不知何故,我認爲你知道這個答案;)這麼好的電話。 OP,確保目標設備上的int小於maxint。但是,OP給出的雙重價值對於這種方法來說很好。 – ader 2012-01-18 17:38:55