2014-02-22 44 views
1

我可是從UITextField[self.dbRef.text intValue];格式化整數值

獲得int價值我想,然後格式化值,以便我可以添加precceds數即小數點後一位。如果[self.dbRef.text intValue];回報4我需要值爲0.04

到目前爲止,我已經試過各種方法,包括

float Y = ([self.dbRef.text intValue]/100); 

    slice.value = Y; 

    NSLog(@"float Y value = %f",Y); 

返回零

NSString* formatedTotalApplianceString = [NSString stringWithFormat:@"0.%@", self.dbRef.text]; 
    NSLog(@"formated string = %@",formatedTotalApplianceString); 

    int totalAppliances = [formatedTotalApplianceString intValue]; 
    NSLog(@"Resulting int value = %d",[formatedTotalApplianceString intValue]); 

    slice.value = totalAppliances; 
    NSLog(@"total appliances int value = %d",totalAppliances); 

返回零

+0

對用戶有利並使用NSNumberFormatter格式化浮點值,使其看起來與用戶的語言環境相符。 – rmaddy

+0

好的一點,但是在這種情況下產生的號碼不會暴露給用戶。 – JSA986

回答

2

你正在做一個整數除法,所以0值在該上下文中是正確的,因爲整數不能表示分數(除非你正在做定點算術,但這是一個不同的蠕蟲罐)。你需要做一個浮點除法,例如:

float Y = ([self.dbRef.text floatValue]/100.0f); 

無論是[self.dbRef.text floatValue]100.0f將變成一個浮動劃分,因爲如果對方將是一個int它會自動獲得澆鑄爲浮動。但「最好」的方法是擁有相同類型的兩個值。

+0

謝謝你現在有道理,謝謝你的解釋 – JSA986

2

變化

float Y = [self.dbRef.text intValue]/100; 

float Y = ((float)[self.dbRef.text intValue])/100; 

在你的第一個變種。

int除int外,即使將其賦值給float,也會返回int結果。在這種情況下4/100 = 0。

+0

謝謝你現在有道理 – JSA986

1

[self.dbRef.text intValue]/100的問題是它是一個整數除法。它會降低分數。解決它的方法之一是通過100.0劃分:

[self.dbRef.text intValue]/100.0 

然而,這是不這樣做,如果你需要在一小部分的前面加一個零的最有效的方法:你可以避開float共通過用前導零填充打印的int到兩個位置:

// If text is 4, the code below prints 0.04 
NSLog(@"0.%02d", [self.dbRef.text intValue]); 
+0

嗯謝謝你,這是一個更有效的方式來做到這一點。打印它工作正常,但我如何將它添加到我的'slice.value'我似乎無法解決如何添加形成一個int值,即slice.value =(@「0.%02d」,[self.dbRef。 text intValue]);返回未使用 – JSA986

+0

@ JSA986如果您需要製作一個字符串,請使用'[NSString stringWithFormat:@「0.%02d」,[self.dbRef.text intValue]]' – dasblinkenlight

+2

@dasblinkenlight問題是,它會工作,直到整數值超過'99' :-) – DarkDust

0

第一代碼返回零,因爲要執行整數除法,這產生一個整數結果。您應該將該值轉換爲浮點數。

第二個代碼也會返回零,因爲您要求提供浮點值的intValue。所以小數部分將被丟棄。

NSString也有一個floatValue方法,您應該使用它來獲得浮動值。一旦除以100,仍然會有一個浮點值(如果商或分紅是浮點數,另一個是整數,則整數會被提升爲浮點):

float Y = ([self.dbRef.text floatValue]/100); 
slice.value = Y;