标签: nsnumberformatter

NSNumberFormatter没有在nil值上返回nilSymbol.我错过了什么?

iOS 4+; 当我将一个nil值传递给我的NSNumberFormatter时,我想要设置的nil符号(NSString*)作为回报.它适用于'零'符号,但不适用于零符号.我尝试了许多不同的配置设置,如行为,分组等.

fmtr = [[NSNumberFormatter alloc] init];

[fmtr setNumberStyle:NSNumberFormatterDecimalStyle];

[fmtr setFormatterBehavior:NSNumberFormatterBehaviorDefault];

[fmtr setUsesGroupingSeparator:NO];

[fmtr setNilSymbol:@"###"];

[fmtr setZeroSymbol:@"0000"];


NSLog(@"[fmtr nilSymbol]=>>%@<<", [fmtr nilSymbol]);

NSLog(@"[fmtr stringFromNumber:nil]=>>%@<<  this should be '###", [fmtr stringFromNumber:nil] );

NSLog(@"[fmtr stringFromNumber:0]=>>%@<<", [fmtr stringFromNumber:[NSNumber numberWithInt:0]] );

NSLog(@"[fmtr stringFromNumber:null]=>>%@<<", [fmtr stringFromNumber:NULL] );

NSLog(@"[fmtr numberFromString:nil]=%@", [fmtr numberFromString:nil] );

NSLog(@"[fmtr numberFromString:@\"0\"]=%@", [fmtr numberFromString:@"0"] );

NSLog(@"[fmtr numberFromString:NULL]=%@", [fmtr numberFromString:NULL] );
Run Code Online (Sandbox Code Playgroud)

以下是测试的输出:

[fmtr nilSymbol] = >> ### <<

[fmtr stringFromNumber:nil] = >>(null)<<这应该是'###

[fmtr stringFromNumber:0] = >> 0000 <<

[fmtr stringFromNumber:null] = >>(null)<<

[fmtr numberFromString:nil] …

iphone objective-c nsnumberformatter ios

6
推荐指数
1
解决办法
1723
查看次数

NSNumberFormatter currencySymbol出错

我在获取NSNumberFormatter的currencySymbol时遇到问题.
我使用带有货币代码"EUR"的NSNumberFormatter.
当我格式化价格时,符号是正确的,我得到了€符号.
但是,当我想使用[formatter currencySymbol]方法获取currencySymbol时,将返回符号$.
如果我手动设置currencySymbol(例如"A"),一切都会正常工作,方法[formatter currencySymbol]将返回"A"符号.


这是我的代码

// Create formatter
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[formatter setCurrencyCode:@"EUR"];
[formatter setLocale:[NSLocale currentLocale]];

// Log the currency symbol
NSLog(@"[formatter currencyCode] : %@", [formatter currencyCode]);
NSLog(@"[formatter currencySymbol] : %@", [formatter currencySymbol]);
NSLog(@"[formatter currencySymbol] : %@", [formatter stringFromNumber:[NSNumber numberWithInt:0]]);
[formatter setCurrencySymbol:@"A"];
NSLog(@"[formatter currencySymbol] : %@", [formatter currencySymbol]);
NSLog(@"[formatter currencySymbol] : %@", [formatter stringFromNumber:[NSNumber numberWithInt:0]]);
Run Code Online (Sandbox Code Playgroud)

以下是控制台结果:

2012-01-17 12:29:11.108[4545:207] [formatter currencySymbol] : $
2012-01-17 12:29:11.109[4545:207] [formatter currencySymbol] : €0.00
2012-01-17 12:29:11.110[4545:207] [formatter currencySymbol] …
Run Code Online (Sandbox Code Playgroud)

currency nsnumberformatter ios

6
推荐指数
1
解决办法
3255
查看次数

在swift中将Double转换为Scientific Notation

我试图将给定的双精度转换为科学记数法,并遇到一些问题.我似乎无法找到关于如何做到这一点的大量文档.目前我正在使用:

 var val = 500
 var numberFormatter = NSNumberFormatter()
 numberFormatter.numberStyle = NSNumberFormatterStyle.ScientificStyle
 let number = numberFormatter.numberFromString("\(val)")
 println(number as Double?) 
 // Prints optional(500) instead of optional(5e+2)
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

math nsnumberformatter ios swift

6
推荐指数
1
解决办法
3939
查看次数

使用Swift中的Locale设置使用NumberFormatter的基数

怎样才能基数(One, Two, Three)使用NumberFormatter使用区域设置的斯威夫特.

例如,我可以1 minute -> One minute使用英语Locale设置进行转换.但是对于挪威人来说,它应该是Et minutt,而它转化为En minutt,这是错误的.挪威语翻译One是,En但是当我们在某个句子中使用它时,有时它应该是Et.这是我的代码示例.

let measurement = Measurement(value: 1, unit: UnitDuration.minutes)
let measurementFormatter = MeasurementFormatter()
measurementFormatter.unitStyle = .long
measurementFormatter.locale = Locale(identifier: "nb_no")
let formatter = NumberFormatter()
formatter.locale = Locale(identifier: "nb_no")
formatter.numberStyle = .spellOut
measurementFormatter.numberFormatter = formatter
let result = measurementFormatter.string(from: measurement)
Run Code Online (Sandbox Code Playgroud)

输出:

én minutt

预期产出

et minutt

locale cardinality number-formatting nsnumberformatter swift

6
推荐指数
0
解决办法
272
查看次数

将长NSString转换为NSNumber

我无法可靠地将更长时间转换NSStringNSNumber.具体来说,我将MPMediaEntityPropertyPersistentID字符串转换为NSNumber 有时它有效,通常不会.

转换代码:

 NSString *keke = [jsonArray objectForKey:@"next"];
 NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
 [f setNumberStyle:NSNumberFormatterDecimalStyle];
 NSNumber *persistentIDasNumber = [f numberFromString:keke];
Run Code Online (Sandbox Code Playgroud)

以下是成功进行数字转换的示例:

String: 3813955856659208324
Number: 3813955856659208324
Run Code Online (Sandbox Code Playgroud)

这是一个不成功的转换:

String: 12790162104953153719 
Number:1.279016210495315e+19
Run Code Online (Sandbox Code Playgroud)

它很接近,但最后发生了什么?它太大了吗?

objective-c nsnumberformatter ios

5
推荐指数
1
解决办法
2575
查看次数

如何从ISOCurrencyCodes获取NSNumberFormatter货币样式?

如果我要使用EUR或USD(两种ISO货币代码),我怎么能让我的NSNumberFormatter正确格式化我这样的字符串?

对于EUR代码:10.000,00€对于美元代码:$ 10,000.00

我可以通过设置localeIdentifier来做到这一点.但我真的需要从ISO货币代码中获取它.这可能吗?

[numberFormatter stringFromNumber: [_property price]];
Run Code Online (Sandbox Code Playgroud)

谢谢!

objective-c nsnumberformatter ios nslocale

5
推荐指数
1
解决办法
7844
查看次数

将千位分隔符"˙"添加到浮点数

我正在使用从0.00到9999.99的数字范围.我需要添加"˙"千位分隔符,所以1300,00应该成为1?300,00.NSNumberFormatter使用","作为分隔符,因此对我不利.

我试过用

func formatNumber (i: Float) -> String {
    var counter = 0
    var correctedNumber = ""

    if i > 999 {
        for char in "\(i)".characters {
            if counter == 1 {
                correctedNumber += "?" + "\(char)"
            } else {
                correctedNumber += "\(char)"
            }

            counter++
        }
    } else {
        correctedNumber = "\(i)"
    }

    return correctedNumber
}
Run Code Online (Sandbox Code Playgroud)

但它不能格式化十进制数字.

这样做的正确方法是什么?

string nsnumber nsnumberformatter ios swift

5
推荐指数
1
解决办法
888
查看次数

拼出序数词

有几种方法可以使用NSNumberFormatter(从 iOS 9 开始)或第三方(如FormatterKit.

还有一种拼写基数的方法,NSNumberFormatter给出one, two, three

但是,我需要获得未缩写的拼写 - first, second, third

我知道 iOS 内部可以做到这一点,因为如果我将“1st”传递给AVSpeechUtterance它,它就会将其发音为“first”。我想知道是否有任何 API 可以获取带有序数拼写的字符串,最好是针对多种语言?

nsnumberformatter ios

5
推荐指数
1
解决办法
1555
查看次数

NumberFormatter:允许“,”和“.” 作为小数点分隔符

我用来NumberFormatter格式化和验证用户的货币输入。由于有些人正在使用,而其他人则.与所选区域设置无关,因此我希望在处理输入时将这两个符号视为小数分隔符(即格式化 a Stringto Number)。

我怎样才能实现这个目标?

我当前的NumberFormatter配置如下:

    private lazy var currencyFormatter: NumberFormatter = {
        let currencyFormatter = NumberFormatter()
        currencyFormatter.numberStyle = .currency
        currencyFormatter.locale = Locale.autoupdatingCurrent
        currencyFormatter.currencySymbol = ""
        currencyFormatter.maximumFractionDigits = 2
        currencyFormatter.minimumFractionDigits = 2
        return currencyFormatter
    }()
Run Code Online (Sandbox Code Playgroud)

我应该使用多个格式化程序来实现我想要的结果吗?

结果

我希望拥有数字5,34并被5.34视为有效并转换为适当的NSNumber. 但是,我仍然希望能够以5.34lksdfns无效为由拒绝。

foundation numberformatter nsnumberformatter ios swift

5
推荐指数
0
解决办法
1905
查看次数

使用环境区域设置时出现 SwiftUI 预览问题

我正在使用一个简单的视图来显示文本NumberFormatter我正在使用一个简单的视图来显示特定区域

\n\n
struct CurrencyView: View {\n    let currency:Currency\n    var body: some View {\n        Text(currency.getFormattedCurrency())\n    }\n}\n\nstruct CurrencyView_Previews: PreviewProvider {\n    static var previews: some View {\n        CurrencyView(currency: Currency(currencyValue: 1.0)).previewLayout(.fixed(width: 300.0, height: 55.0)).environment(\\.locale, .init(identifier: "fr_Fr"))\n    }\n}\n\nstruct Currency{\n    let currencyValue:Double\n\n    func getFormattedCurrency() -> String{\n        let formatter = NumberFormatter()\n        formatter.numberStyle = .currency\n        let formatterCurrency =  formatter.string(for: self.currencyValue) ?? ""\n        return formatterCurrency\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我预计预览会显示货币French\xe2\x82\xac 中的货币,正如我在预览中的区域设置中提到的那样。

\n

localization nsnumberformatter swiftui

5
推荐指数
1
解决办法
1742
查看次数