【问题标题】:NSNumber to NSString (without trailing zeros if it has decimals)NSNumber 到 NSString(如果它有小数,则不带尾随零)
【发布时间】:2011-09-22 18:12:43
【问题描述】:

我正在努力解决这个问题,但我找不到任何资源: 我有一个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

有人有这方面的成功经验吗?

【问题讨论】:

    标签: objective-c cocoa nsstring nsnumber


    【解决方案1】:

    NSNumberFormatter 有这样的方法:

    - (void)setGroupingSeparator:(NSString *)string
    

    我认为,您可以返回到您拥有的变体:

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

    并使用该函数设置附加参数:

    [formatter setGroupingSeparator:@""];
    

    或者试试这个方法:

    [formatter setUsesGroupingSeparator:NO];
    

    【讨论】:

    • 谢谢,我不知道这个选项。它适用于美国本地,我会用其他语言环境进行一些测试,如果可行,请接受你的答案:-)
    【解决方案2】:

    NSNumberFormatter 解决方案,你在正确的道路上。

    但是:

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

    这样您就可以真正自定义NSNumberFormatter 将数值表示为字符串的方式。

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

      • floatValue 不一定返回CGFloat,无论如何,将数字拆箱为NSIntegerCGFloat 或其他类型的值并不能解决问题将值与字符串相互转换。
      猜你喜欢
      • 1970-01-01
      • 2019-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多