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] …
我在获取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) 我试图将给定的双精度转换为科学记数法,并遇到一些问题.我似乎无法找到关于如何做到这一点的大量文档.目前我正在使用:
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)
我究竟做错了什么?
怎样才能基数(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
我无法可靠地将更长时间转换NSString为NSNumber.具体来说,我将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)
它很接近,但最后发生了什么?它太大了吗?
如果我要使用EUR或USD(两种ISO货币代码),我怎么能让我的NSNumberFormatter正确格式化我这样的字符串?
对于EUR代码:10.000,00€对于美元代码:$ 10,000.00
我可以通过设置localeIdentifier来做到这一点.但我真的需要从ISO货币代码中获取它.这可能吗?
[numberFormatter stringFromNumber: [_property price]];
Run Code Online (Sandbox Code Playgroud)
谢谢!
我正在使用从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)
但它不能格式化十进制数字.
这样做的正确方法是什么?
有几种方法可以使用NSNumberFormatter(从 iOS 9 开始)或第三方(如FormatterKit.
还有一种拼写基数的方法,NSNumberFormatter给出one, two, three。
但是,我需要获得未缩写的拼写 - first, second, third。
我知道 iOS 内部可以做到这一点,因为如果我将“1st”传递给AVSpeechUtterance它,它就会将其发音为“first”。我想知道是否有任何 API 可以获取带有序数拼写的字符串,最好是针对多种语言?
我用来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无效为由拒绝。
我正在使用一个简单的视图来显示文本NumberFormatter我正在使用一个简单的视图来显示特定区域
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}\nRun Code Online (Sandbox Code Playgroud)\n\n我预计预览会显示货币French\xe2\x82\xac 中的货币,正如我在预览中的区域设置中提到的那样。
ios ×8
swift ×4
objective-c ×3
cardinality ×1
currency ×1
foundation ×1
iphone ×1
locale ×1
localization ×1
math ×1
nslocale ×1
nsnumber ×1
string ×1
swiftui ×1