首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift 3与NumberFormatter (.currency) ==

Swift 3与NumberFormatter (.currency) ==
EN

Stack Overflow用户
提问于 2016-09-12 20:06:16
回答 4查看 20.6K关注 0票数 11

Xcode 8.0 (8A218a) GM

目标:iOS 10 (Swift 3)

考虑以下代码:

代码语言:javascript
复制
let number = NSDecimalNumber(decimal: 22.4)

let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .currency
numberFormatter.locale = Locale.current

let result = numberFormatter.string(from: number)
print(result!)

结果是:

代码语言:javascript
复制
¤22.40

(我不知道¤是什么意思。)

但是,如果我初始化区域设置,如:

代码语言:javascript
复制
numberFormatter.locale = Locale(identifier: "en_US")

其结果将是:

代码语言:javascript
复制
$22.40

..。这也是我最初所期望的。

请注意,这在游乐场中起作用:

这个问题似乎只发生在通过Xcode启动的设备/模拟器上。

(我在两种不同的macOS上进行了测试--在我的工作场所和家里。)

对发生了什么有什么想法吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-09-12 23:46:11

回答我自己的问题:重新创建这个项目。*\

该项目从Xcode 7+ Swift 2开始,然后“迁移”到Xcode 8+ Swift 3(手动)。一定是出了什么问题。我不知道是什么(我也不想知道)。

这不是一个大项目,所以我花了大约40分钟来转移文件。如果那是个大项目,我现在已经.够了。

请用Xcode。

票数 1
EN

Stack Overflow用户

发布于 2017-01-31 05:15:06

我也有同样的问题,我用下面的代码来解决它。希望它有用

代码语言:javascript
复制
func formatCurrency(value: Double) -> String {
    let formatter = NumberFormatter()
    formatter.numberStyle = .currency
    formatter.maximumFractionDigits = 2
    formatter.locale = Locale(identifier: Locale.current.identifier)
    let result = formatter.string(from: value as NSNumber)
    return result!
}
票数 15
EN

Stack Overflow用户

发布于 2017-09-05 22:25:07

这是发生在我的模拟器,原来这是一个错误的方案设置。签出以下步骤:

  1. 单击“设置活动方案”(直接单击模拟器类型的左侧,即iPhone 7 Plus等)。
  2. 单击编辑方案.
  3. 单击左边的运行设置
  4. 应用程序区域设置为所需区域
  5. 应用程序语言设置为所需的语言
  6. 尝试再次运行您的应用程序,您不应该再让它显示“and”符号,相反,它应该反映正确的货币符号。
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39458003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档