【问题标题】:How to format and print float numbers on iOS?如何在 iOS 上格式化和打印浮点数?
【发布时间】:2012-07-19 10:13:23
【问题描述】:

我想在 Cocoa-Touch 上创建具有正确本地化的浮点数的格式化输出。输出应该等同于printf("%<a>.<b>f", n) 的输出,其中<a> 是总位数,<f> 是最大小数位数。

NSNumberFormatter<a>=6<f>=2 的设置:(平台为 iOS 5.1 SDK、Xcode 4.3.3 和 iPhone Simulator 5.1)

NSNumberFormatter *nf = [[NSNumberFormatter alloc] init];
[nf setNumberStyle:NSNumberFormatterDecimalStyle];
[nf setPaddingCharacter:@" "];
[nf setUsesGroupingSeparator:NO];
[nf setLocale:[NSLocale autoupdatingCurrentLocale]];
[nf setUsesSignificantDigits:YES];
[nf setMaximumSignificantDigits:6];
[nf setMaximumFractionDigits:2];
[nf setRoundingMode:NSNumberFormatterRoundFloor];
NSLog(@"Test: %@", [nf stringFromNumber:[NSNumber numberWithDouble:2.64324897]]);

预期输出(使用德语区域设置):Test: 2,64

观察到的输出(使用德语区域设置):Test: 2,64324

其他意见: 我尝试对小数位使用不同的值,例如[nf setMaximumFractionDigits:4][nf setMaximumFractionDigits:0]。结果没有改变,似乎忽略了小数位。将语言环境更改为 US 只会将 , 更改为 .,而不是小数位数。

问题:如何将printf-format 字符串正确转换为NSNumberFormatter

【问题讨论】:

    标签: cocoa-touch nsnumberformatter


    【解决方案1】:

    Ryan 并没有完全错。使用localizedStringWithFormat 方法:

    使用objective-c

    NSNumber *yourNumber = [nf numberFromString:yourString];
    //to create the formatted NSNumber object
    
    NSString *yourString = [NSString localizedStringWithFormat:@"%.2F", yourNumber];
    //to create the localized output
    

    使用 SWIFT 3

    let yourString: String
    yourString = String.localizedStringWithFormat("%.2F", yourDoubleNumber) //no need for NSNumber Object
    

    有点晚了,但它仍然可能会有所帮助。祝你好运!

    【讨论】:

    • 是的,这正是它需要做的!谢谢,即使是迟到的答案也很感激!
    • 不客气!我在本地化方面也遇到了一些困难。祝你好运!
    • 魔术。我在那里,编写 NSNumber 类别......当我需要的一切都已经存在时,整洁而简单。正是这些小事让我们如此喜欢 Apple。
    猜你喜欢
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    • 2013-06-11
    • 2010-10-14
    相关资源
    最近更新 更多