UIKeyboardTypeDecimalPad - 将逗号更改为点

时间:2011-05-11 06:02:07

标签: iphone decimal

我使用此方法显示带小数分隔符的键盘

myTextField.keyboardType=UIKeyboardTypeDecimalPad;

如何将逗号更改为点分隔符?

我有芬兰语语言环境。使用逗号,小数点不适用于我的应用程序。

-(IBAction)calculate {
    float x = ([paino.text floatValue]) / ([pituus.text floatValue]) *10000;    
    label.text = [[NSString alloc] initWithFormat:@"%0.02f", x];
}

2 个答案:

答案 0 :(得分:10)

确定,因此您可以使用数字键盘编辑文本字段,该键盘取决于当前的语言环境,从而获得数字的文本表示,该数字也取决于当前语言环境。编辑完成后,您阅读它并想要转换为数字。

要进行转换,您可以像这样使用NSNumberFormatter:

NSNumberFormatter *nf = [[NSNumberFormatter alloc] init];

您可以设置格式化程序,设置区域设置(!),限制,格式化,小数/分组分隔符,小数位数等。然后您只需使用它:

float number = [nf numberFromString: field.text];

就是这样!现在你有了这个数字,即使文本中包含逗号,只要你让:keyboard和formatter都具有相同的格式,相同的风格 - 也就是说,可能只是让当前的语言环境在整个地方使用。

修改

这是一种货币格式化程序,可以在货币的字符串和数字之间进行转换:

NSNumberFormatter *nf = [[NSNumberFormatter alloc] init];
[nf setNumberStyle: NSNumberFormatterCurrencyStyle];
[nf setRoundingMode: NSNumberFormatterRoundHalfUp];
[nf setMaximumFractionDigits: 2]

这是一个带有4位小数的百分比格式化程序:

NSNumberFormatter *nf = [[NSNumberFormatter alloc] init];
[nf setNumberStyle: NSNumberFormatterPercentStyle];
[nf setRoundingMode: NSNumberFormatterRoundHalfUp];
[nf setMaximumFractionDigits: 4];

都在当前的语言环境中。

如您所见,您可以根据您尝试输入的数字来定义样式,数字,舍入行为等等。有关更多详细信息(您可以使用NSNumberFormatter进行的操作非常多),您应该阅读Apple文档,它将超出SO答案的范围来描述所有内容。

在您的情况下,如果paino和pituus也是UITextFields:

-(IBAction)calculate {
    NSNumberFormatter *nf = [[NSNumberFormatter alloc] init];
    [nf setRoundingMode: NSNumberFormatterRoundHalfUp];
    [nf setMaximumFractionDigits: 2];

    float npaino = [[nf numberFromString: paino.text] floatValue];
    float npituus = [[nf numberFromString: pituus.text] floatValue];

    float x = npaino] / npituus *10000;    
    label.text = [nf stringFromNumber: [NSNumber numberWithFloat: x]];

    [nf release];
}

现在为了避免在每次计算中创建格式化程序,您可以将其设为实例变量,因为这些转换只需要一个。

答案 1 :(得分:2)

这样轻松:
[[yourField text] stringByReplacingOccurrencesOfString:@“,”withString:@“。”]
它将以各种方式和语言发挥作用。

在您的代码中,它将是:

-(IBAction)calculate {
    float fPaino = [[paino.text stringByReplacingOccurrencesOfString:@"," withString:@"."] floatValue];
    float x = fPaino / ([pituus.text floatValue]) *10000;    
    label.text = [[NSString alloc] initWithFormat:@"%0.02f", x];
}

其他的东西:你确定需要为结果“分配”吗?由于label.text已包含其retain / release,因此您只需创建一个[NSString stringWithFormat:@“%0.02f”,x]