Hon*_*Tom 10 string nsdecimalnumber ios swift
我尝试将String转换为NSDecimalNumber,这是我的代码:
class func stringToDecimal (dataToDecimal: String) -> NSDecimalNumber {
let dataToDecimal = dataToDecimal.stringByReplacingOccurrencesOfString(",", withString: ".")
print(dataToDecimal)
let decimalReturn = NSDecimalNumber(string: dataToDecimal)
print(decimalReturn)
if decimalReturn == NSDecimalNumber.notANumber(){
return 0.00
}
return decimalReturn
}
Run Code Online (Sandbox Code Playgroud)
首先,我认为可能是错误的,但即便如此.它不起作用.第一次打印(转换前)显示例如80,00,但打印(decimalReturn)仅显示80
if行只是检查结果是否不是数字.
rob*_*off 17
使用an NSNumberFormatter来解析输入.将其generatesDecimalNumbers属性设置为true:
let formatter = NumberFormatter()
formatter.generatesDecimalNumbers = true
Run Code Online (Sandbox Code Playgroud)
如果你想在无法解析字符串时返回0,这就是你如何使用它:
func decimal(with string: String) -> NSDecimalNumber {
return formatter.number(from: string) as? NSDecimalNumber ?? 0
}
decimal(with: "80.00")
// Result: 80 as an NSDecimalNumber
Run Code Online (Sandbox Code Playgroud)
默认情况下,格式化程序将查看设备的区域设置以确定小数点标记.你应该这样离开.为了举例,我将强制它到法语区域:
// DON'T DO THIS. Just an example of behavior in a French locale.
formatter.locale = Locale(identifier: "fr-FR")
decimal(with: "80,00")
// Result: 80
decimal(with: "80.00")
// Result: 0
Run Code Online (Sandbox Code Playgroud)
如果您确实希望始终使用逗号作为小数点,则可以设置decimalSeparator属性:
formatter.decimalSeparator = ","
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7408 次 |
| 最近记录: |