2013-02-25 63 views
1

如何計算iOS中浮點數後的位數?如何計算iOS中浮點數後的位數?

例如:

  • 3.105應該返回3
  • 3.0應該返回0
  • 2.2應該返回1

更新: 此外,我們需要添加下面的例子。因爲我想知道小數部分的位數。

  • 1E-1應該返回1
+0

投到NSString,然後找到點的位置? – iiFreeman 2013-02-25 10:30:35

+7

@iiFreeman只是要知道,並非所有的語言環境都使用小數點作爲小數點 – 2013-02-25 10:36:47

+1

在iOS中(使用標準的Apple工具),不可能將3.105或2.2作爲「float」或「double」值,因爲這些值是不能用二進制浮點表示。你有其他格式的值嗎?如果不是,你是否將這些數值靠近這些值,例如2.20000000000000017763568394002504646778106689453125而不是2.2?那麼應該使用什麼標準來確定是否將此視爲2.2而不是2.20000000000000017763568394002504646778106689453125? – 2013-02-25 17:01:20

回答

1

我用什麼如下:

NSString *priorityString = [[NSNumber numberWithFloat:self.priority] stringValue]; 
    NSRange range = [priorityString rangeOfString:@"."]; 
    int digits; 
    if (range.location != NSNotFound) { 
     priorityString = [priorityString substringFromIndex:range.location + 1]; 
     digits = [priorityString length]; 
    } else { 
     range = [priorityString rangeOfString:@"e-"]; 
     if (range.location != NSNotFound) { 
      priorityString = [priorityString substringFromIndex:range.location + 2]; 
      digits = [priorityString intValue]; 
     } else { 
      digits = 0; 
     } 
    } 
5

試試這個方法:

NSString *[email protected]"99.1234"; 

NSArray *array=[enteredValue componentsSeparatedByString:@"."]; 
NSLog(@"->Count : %ld",[array[1] length]); 
+0

您需要首先修剪0。浮點總是顯示8(IIRC)十進制數字。即3.00000000將返回8我認爲?正如David評論的那樣,您必須根據語言環境找到正確的分隔符。 – Fogmeister 2013-02-25 10:36:44

+0

@Fogmeister:你說得對,我按照有關的例子解決了。 – 2013-02-25 10:42:33

0

也許還有一個更優雅的方式要做到這一點,但是當從32位體系結構應用程序轉換到64位體系結構時,我發現許多其他方式t精度和混亂的事情。所以這裏是我如何做到這一點:

bool didHitDot = false;  
int numDecimals = 0; 
NSString *doubleAsString = [doubleNumber stringValue]; 

for (NSInteger charIdx=0; charIdx < doubleAsString.length; charIdx++){ 

    if ([doubleAsString characterAtIndex:charIdx] == '.'){ 
     didHitDot = true; 
    } 

    if (didHitDot){ 
     numDecimals++; 
    } 
} 

//numDecimals now has the right value