格式化整数值

时间:2014-02-22 12:19:07

标签: ios objective-c cocoa-touch int

我从int UITextField

获取[self.dbRef.text intValue];

我想格式化该值,以便我可以添加一个小数位,以预先确定数字即。如果[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);

返回零

4 个答案:

答案 0 :(得分:2)

更改

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

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

在你的第一个版本中。

将int除以int返回int结果,即使然后将其指定给float。在这种情况下,4/100 = 0.

答案 1 :(得分:2)

你正在进行整数除法,因此0值在该上下文中是正确的,因为整数不能表示分数(除非你正在进行定点算术,但这是一种不同的蠕虫)。您需要执行浮点除法,例如:

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

[self.dbRef.text floatValue]100.0f会将其转换为浮动除法,因为如果另一方是int,它会自动转换为浮点数。但“最好”的方法是让两个值都相同。

答案 2 :(得分: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]);

答案 3 :(得分:0)

第一个代码返回零,因为您正在执行整数除法,从而产生整数结果。您应该将值转换为浮点数。

第二个代码也返回零,因为您要求浮点值的intValue。因此小数部分将被丢弃。

NSString还有floatValue方法,您应该使用它来获取浮动值。一旦除以100,你仍然会有一个浮点值(如果商或被除数是一个浮点而另一个是一个整数,整数被提升为浮点数):

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