2013-02-08 21 views
-1

我在其中工作了很多,並且找不到解決方案。即使標題也無法清楚解釋。目標C:獲取正確的浮點值(對齊)

我已經做了以下

float wq = [[weightarray objectAtIndex:selectedint]floatValue]; 
float q = [quantity floatValue]; 
float total = wq * q; 

爲前三個值重量,數量和總,如果

​​

那麼結果是

wq = 3.140000 q= 4.000000 total = 12.560000 

但我需要

wq = 3.14 total = 12.56 

該怎麼辦? 我搜索了很多,有人建議使用NSDecimal,

NSDecimalNumberHandler *roundingBehavior = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundPlain scale:2 raiseOnExactness:FALSE raiseOnOverflow:TRUE raiseOnUnderflow:TRUE raiseOnDivideByZero:TRUE]; 

但規模不是2這裏,後點WQ值可能有3個或四位數字。

如果總數= 2.30000100意味着我需要總數= 2.300001 如何解決這個問題?

+0

澄清 - 你想如何截斷數字 - 到一個已知的小數位數或刪除結尾零 - 以及如果dea與2.3輸入實際上被存儲爲2.300000001如何? – Mark

+0

我需要刪除只有結尾的零 – NAZIK

+0

,並且您知道您在字符串中的內容不一定是float中的內容,例如我的2.3輸入實際存儲爲2.300000001? – Mark

回答

2

有可能是一個更直接的方式來實現它(我不知道),但這裏有一個建議......

  1. 轉換爲字符串,因爲你已經做的。
  2. 使用[myString hasSuffix:@"0"]來查看它是否以零結尾。
  3. 使用[myString substringToindex:[myString length]-1]創建一個沒有最終零的新字符串。
  4. 重複。

我知道這不是優雅,但除非有人有更好的解決方案,這至少可以做你想做的。

更新:從頭開始 - 我剛剛發現[myString stringByTrimmingCharactersInSet:set]。當然,這一定是你需要的......?

+0

救了我的一天,親切的幫助 – NAZIK

3

我不完全確定你要求什麼,但它看起來好像你想要的值只顯示一個2分鐘。在這種情況下,你可以使用一個字符串格式如下所示:

NSString *output = [NSString stringWithFormat:@"float = %.2f", 3.14]; 

.2規定的浮動應該是合理的,以2 D.P.

希望這有助於

0

最後溶液中發現的,這要歸功於馬丁

float total = 12.56000; 
NSString *s = [NSString stringWithFormat:@"%f", total]; 
NSLog(@"%@",s); 
BOOL success; 
success =NO; 
while(!success) 
{ 
    if ([s hasSuffix:@"0"]) 
    { 
     s = [s substringWithRange:NSMakeRange(0,[s length]-1)]; 
    } 
    else if ([s hasSuffix:@"."]) 
    { 
     s = [s substringWithRange:NSMakeRange(0,[s length]-1)]; 
     success = YES; 
    } 
    else 
     success = YES; 
} 
NSLog(@"%@",s); 

如果總= 12.560000它返回總= 12.56

如果總= 12.000000它返回總= 12

如果總= 10.000000它返回總數= 10

如果總數= 12。3000100它返回總數= 12.30001