如何計算iOS中浮點數後的位數?如何計算iOS中浮點數後的位數?
例如:
- 3.105應該返回3
- 3.0應該返回0
- 2.2應該返回1
更新: 此外,我們需要添加下面的例子。因爲我想知道小數部分的位數。
- 1E-1應該返回1
如何計算iOS中浮點數後的位數?如何計算iOS中浮點數後的位數?
例如:
更新: 此外,我們需要添加下面的例子。因爲我想知道小數部分的位數。
我用什麼如下:
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;
}
}
試試這個方法:
NSString *[email protected]"99.1234";
NSArray *array=[enteredValue componentsSeparatedByString:@"."];
NSLog(@"->Count : %ld",[array[1] length]);
您需要首先修剪0。浮點總是顯示8(IIRC)十進制數字。即3.00000000將返回8我認爲?正如David評論的那樣,您必須根據語言環境找到正確的分隔符。 – Fogmeister 2013-02-25 10:36:44
@Fogmeister:你說得對,我按照有關的例子解決了。 – 2013-02-25 10:42:33
也許還有一個更優雅的方式要做到這一點,但是當從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
投到NSString,然後找到點的位置? – iiFreeman 2013-02-25 10:30:35
@iiFreeman只是要知道,並非所有的語言環境都使用小數點作爲小數點 – 2013-02-25 10:36:47
在iOS中(使用標準的Apple工具),不可能將3.105或2.2作爲「float」或「double」值,因爲這些值是不能用二進制浮點表示。你有其他格式的值嗎?如果不是,你是否將這些數值靠近這些值,例如2.20000000000000017763568394002504646778106689453125而不是2.2?那麼應該使用什麼標準來確定是否將此視爲2.2而不是2.20000000000000017763568394002504646778106689453125? – 2013-02-25 17:01:20