NSNumber到NSString(如果它有小数,则不带尾随零)

时间:2011-09-22 18:12:43

标签: objective-c cocoa nsstring nsnumber

我正在努力解决这个问题,我找不到任何资源: 我有一个NSNumber我希望在UITextField中显示,因此用户可以对其进行编辑。 所以我需要将此NSNumber转换为NSString,如下所示:

float value  -> desired string value
1.0000000... -> 1
10.000000... -> 10
1.1230000... -> 1.123 or 1,123 depending on the locale
1000000.0... -> 1000000

我尝试使用NSNumberFormatter,但后来我得到了大数字的空格或逗号:

1000000.0... -> 1,000,000 or 1 000 000 depending on the locale

我也试过

[NSString stringWithFormat:@"%g", val]

但是对于大数字我有一个科学的表达:

1000000.0 -> 1e+06

有人对此有成功经验吗?

3 个答案:

答案 0 :(得分:3)

NSNumberFormatter的方法如下:

- (void)setGroupingSeparator:(NSString *)string

我想,你可以回到你所拥有的变体:

1000000.0... -> 1,000,000 or 1 000 000 depending on the locale

并使用该函数设置其他参数:

[formatter setGroupingSeparator:@""];

或者尝试这种方法:

[formatter setUsesGroupingSeparator:NO];

答案 1 :(得分:3)

NSNumberFormatter 解决方案,您走的是正确的道路。

可是:

  • 它使用的格式取决于语言环境(如果你不覆盖它,它使用默认的语言环境,或者你可以设置NSFormatter使用的语言环境),因为NSLocale信息也带有Region格式化信息(使用美国语言环境或FR语言环境格式化数字会导致不同的格式和不同的表示形式)
  • 您可以通过调整NSNumberFormatter的选项来自定义格式,例如更改使用的分组分隔符,更改小数点分隔符等。

通过这种方式,您可以真正自定义NSNumberFormatter将数值表示为字符串的方式。

答案 2 :(得分:-2)

尝试将nsnumber值转换为NSInteger或CGFloat并将其存储在新变量中。然后将转换后的变量设置为uitextfield。

CGFloat floatNumber = [numberInNSNumber floatValue];

textfield.text = [NSString stringWithFormat:@"%0.2f",floatNumber];

我认为它应该对你有用.. !!