- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Swift 中编写了一个函数(字符串扩展)来获取任何货币字符串,例如“$500.00”或“250,75 €”,甚至“500”,然后从中返回一个 nsdecimalnumber。
不幸的是,当我传入“250,75 €”时,它命中了我代码的 if (nf.number(from: self) == nil) 部分并评估为 nil,因此什么也不返回。它似乎只在您用逗号添加更改时发生,例如 250,75。但是,如果我做了 250,它就会起作用。它似乎只为欧元这样做。美元运作良好($500.00、125.75 等)
这是我的代码。有什么想法吗?感谢您的宝贵时间!
extension String{
func toDecimalFromCurrencyString() -> NSDecimalNumber
{
let nf = NumberFormatter()
nf.numberStyle = NumberFormatter.Style.currency
nf.formatterBehavior = NumberFormatter.Behavior.behavior10_4
nf.generatesDecimalNumbers = true
var test = self.replacingOccurrences(of: nf.currencySymbol!, with: "", options: NSString.CompareOptions.literal, range: nil)
test = test.replacingOccurrences(of: nf.currencyDecimalSeparator!, with: "", options: NSString.CompareOptions.literal, range: nil)
test = test.replacingOccurrences(of: nf.currencyGroupingSeparator!, with: "", options: NSString.CompareOptions.literal, range: nil)
let scanner: Scanner = Scanner(string:test)
let isNumeric = (scanner.scanDecimal(nil) && scanner.isAtEnd)
//If the string entered isn't numeric (for example ... or $$$, then fail)
if (self.trimmingCharacters(in: CharacterSet.whitespaces).utf16.count == 0 || (!isNumeric))
{
return 0.0
}
//If the string contains more than one decimal separator (.), or more than one currency symbol ($), return 0.0
else if ((self.components(separatedBy: nf.currencyDecimalSeparator!).count-1) > 1 || (self.components(separatedBy: nf.currencySymbol!).count - 1) > 1) {
return 0.0
}
//If the string contains more than one consecutive currency grouping separator (i.e. ,,) then return 0.0
else if ((components(separatedBy: nf.currencyGroupingSeparator! + nf.currencyGroupingSeparator!).count-1) > 0)
{
return 0.0
}
else
{
if (nf.number(from: self) == nil) {
return 0.00
}
else {
return nf.number(from: self) as! NSDecimalNumber
}
}
}
}
最佳答案
您可以简单地从字符串中删除所有非数字并使用两个数字格式化程序,一个带点,另一个带逗号,并在链中使用 nil 合并运算符,如下所示:
extension Formatter {
static let decimalWithDotSeparator: NumberFormatter = {
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
numberFormatter.decimalSeparator = "."
return numberFormatter
}()
static let decimalWithCommaSeparator: NumberFormatter = {
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
numberFormatter.decimalSeparator = ","
return numberFormatter
}()
}
extension String {
var numberFromCurrency: NSDecimalNumber? {
var string = self
while let first = string.characters.first, Int("\(first)") == nil {
string = String(string.characters.dropFirst())
}
while let last = string.characters.last, Int("\(last)") == nil {
string = String(string.characters.dropLast())
}
return (Formatter.decimalWithDotSeparator.number(from: string) ??
Formatter.decimalWithCommaSeparator.number(from: string) ?? 0)
.decimalValue.decimalNumber
}
}
extension Decimal {
var decimalNumber: NSDecimalNumber { return NSDecimalNumber(decimal: self) }
}
let dollar = "$249.99"
dollar.numberFromCurrency // 249.99
let real = "R$249,99"
real.numberFromCurrency // 249.99
let euro = "0,50€"
euro.numberFromCurrency // 0.5
关于ios - NumberFormatter 和货币字符串的欧元错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43773135/
我正在使用 python 正则表达式查找字符串中的所有价格。到目前为止,我只是无法正确管理符号。此代码,输入:'happy$37.54000happy$34$3454$3333€27.80€3.00.
如何使用 imagettftext() 创建 € 符号?我使用的字体“Lucida Grande”包含欧元符号。€ 也不起作用。 最佳答案 参见the documentation (强调我的): Th
我正在使用 AngularJS 货币过滤器,但在正确显示欧元符号时遇到了问题。 HTML: {{ price.priceTotal | currency: myController.getPriceC
为了练习,我需要构建一个非常简单的货币转换器,仅以设定汇率 (0.91/1.09) 将货币从美元转换为欧元,反之亦然。我希望我的 App.js 文件尽可能模块化。另外,我想使用钩子(Hook)(不是类
我有一个 XML 文档 file.xml它以 Iso-latin-15(又名 Iso-Latin-9)编码 €.txt 从我最喜欢的文本编辑器中,我可以看出这个文件以 Iso-Latin-1
我可以将 Alt 键与数字键盘结合使用来键入符号,但如何以编程方式将符号(英镑、欧元、版权)插入文本框? 我有一个配置屏幕,所以我需要动态创建\uXXXX。 最佳答案 在 C# 中,Unicode 字
我使用此 URL 在 CS:GO 容器中一次获取 100 个结果。我用 {currency} 代替 3,用 {start} 代替 100 的倍数,我的问题是 currency=3 code> 似乎不是
我的 Angular 应用程序需要以不同格式显示货币,例如:$、£、2.105,10€ - + 之后的欧元符号不同的分隔符 - 这可以通过包含 i18n angular-locale_de-de.js
我想使用欧元货币构建一个 PayPal 支付 URL。 我在以下位置找到了欧元 (EUR) 的国家/地区代码: https://developer.paypal.com/docs/classic/ap
我是一名优秀的程序员,十分优秀!