使用 NumberFormatter 替换默认区域设置货币代码格式化货币

2023-12-06

在我的模型中,我将价格存储为NSDecimalNumber价值观。

struct Item {
    var price: NSDecimalNumber // eg. 3.543
    var currencyCode: String // eg. "USD"
}

我想使用用户的正确显示它们Locale。我找到了一个使用的解决方案NumberFormatter:

let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.currencyCode = item.currencyCode

formatter.string(from: item.price)

正如预期的那样,它根据用户的区域设置给出不同的结果。

如果我设置formatter.currencyCode to USD:

  • For "en_US": "$3.543"
  • For "fr_CA": "US$3.543"
  • For "de_DE": "3,543 US$"
  • For "da_DK": "3,543 US$"

如果我设置formatter.currencyCode to DKK:

  • For "en_US": "DKK 3.543"
  • For "fr_CA": "DKK 3.543"
  • For "de_DE": "3,543 DKK"
  • For "da_DK": "3,543 kr."

问题在于,对于更多外来货币(例如 DKK - 丹麦克朗),格式化程序使用currencyCode 而不是currencySymbol。我觉得使用符号而不是仅仅使用代码更有意义。

理想情况下,如果我设置formatter.currencyCode to DKK我想要:

  • For "en_US": "kr. 3.543"
  • For "fr_CA": "kr. 3.543"
  • For "de_DE": "3,543 kr."
  • For "da_DK": "3,543 kr."

我怎样才能实现这个目标?或者我应该坚持如何Locale.current已设置且不触摸它?

注意:我不能使用NumberFormatter仅适用于数字,然后手动添加货币符号,因为符号可以分配给不同的货币:$3.543是美元价格en_US Locale but in fr_CA Locale这是加元的价格。

EDIT根据评论中的建议,我将价格类型更改为NSDecimalNumber.


如果您确实想使用问题中的格式,那么您可以在更改区域设置后单独设置货币符号

formatter.locale = Locale(identifier: "en_US")
formatter.currencySymbol = Locale.current.currencySymbol

if let str = formatter.string(for: 123.45) {
    print(str)
}

123.45 瑞典克朗

如果货币没有符号,那么我建议使用货币代码,或者您需要维护自己的货币代码/符号对列表。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 NumberFormatter 替换默认区域设置货币代码格式化货币 的相关文章

  • iOS 上的本地通知需要用户许可吗?

    我在我的应用程序中使用 UILocalNotification 来安排通知 通知工作正常 并在我需要时显示 我对此没有意见 我没有做任何远程 推送通知 让我想知道的是 我从未见过您通常在多个应用程序中看到的推送通知的著名权限对话框 我什至重
  • 将我的免费应用程序从 Universal 升级到仅限 iPhone

    我释放我的free app到 appStore 它的版本是 1 0 它是一个Universal app 现在我想发布 1 1 版本到 appStore 我将其升级到iPhone only appStore会拒绝我吗 我已阅读类似的问题 ht
  • NSUserDefaults、Settings.bundle 和应用程序组

    我有一个有 2 个目标的应用程序 主应用程序和 Today 扩展 为了在这些目标之间共享设置 我打开了应用程序组功能 添加了一个组group myApp com然后使用NSUserDefaults在主应用程序和今日扩展中都是如此 var d
  • 小部件配置在 macOS 上不起作用

    我为我的 iOS 应用程序制作了一个小部件 效果很好 现在我正在将其移植到我的 macOS 应用程序中 但不知何故 小部件配置不起作用 这些项目已显示 但我无法以某种方式选择它们 查看屏幕截图 但请看一下我制作的视频 https youtu
  • 如何从java代码中检测操作系统语言(区域设置)

    从java代码中了解操作系统语言 区域设置 的正确方法是什么 我努力了 Locale getDefault System getProperties user language 但它们并不正确 实际上没有显示 系统区域设置 可以通过 Win
  • 如何在不使用 Cocos2D 的情况下将声音实现到现有应用程序中

    例如 iOS SDK下载页面上有示例代码 我正在使用计算器应用程序 iPhoneUnitTests 我想知道是否可以轻松地向已构建的应用程序上的按钮添加声音 播放短声音 例如按钮声音 实际上非常简单 这是一个简单的例子 您必须链接 Audi
  • 如何使用 swift 将 UIColor 转换为字符串以及将字符串转换为 UIColor?

    我有一个具有 UIColor 属性的对象 class Beer NSObject var color UIColor 我将其保存到数据库中 因此我需要将此属性转换为有效的 JSON 类型 因此我正在考虑将其转换为字符串 如何转换为要存储的字
  • 如何更改故事板的初始视图控制器?

    我有2个视图控制器 我禁用了第一个视图控制器的初始视图控制器 并启用了第二个视图控制器 但是当启动项目时 初始视图控制器仍然是第一个视图控制器 我该怎么办 谢谢 点击第二个视图控制器 然后选择 Is initial View Control
  • UIAlertView 之上的 UIView

    在我的应用程序中 使用了锁定屏幕 有时一个UIAlertView如图所示 现在当用户将应用程序发送到后台并再次将其置于前面时 UIAlertview会显示在锁定屏幕上方 是否有可能添加一个UIViewController的观点高于一切 即高
  • iOS 版有 Parse.com 的替代品吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我目前使用 parse com 来管理用户 他们有很棒的 AP I 有不错的后端供我管理东西 但我更愿意托管我自己的数据 服务器后端 我可
  • 方向改变后的javascript最大视口高度Android和iOS

    目标 查找设备的最大视口高度 包括设备的空间address bar这样我们就可以动态调整 min body 的大小并将内容向上推 问题 移动浏览器处理方向状态的方式不同 方向变化时更新 DOM 属性的方式也不同 使用 JavaScript
  • 本地化 watchkit 配套应用程序的显示名称

    我在 Apple Watch 配套应用程序上本地化应用程序显示名称时遇到一些问题 按照指导方针 我将 CFBundleName 本地化如下 CFBundleDisplayName 我的应用程序 CFBundleName 我的应用程序 我为我
  • 如何确定当前处于活动状态的视图控制器/显示视图的视图控制器?

    在我的应用程序中 我正在排队一些本地通知 当它们触发时我必须呈现模式视图 问题是我有许多视图控制器 其中任何一个当前都可能处于活动状态 因此需要呈现模式视图控制器 如何确定当前正在使用哪一个 我将导航控制器设置为 Windows 根视图控制
  • 使用 CMake 在 iOS 中使用另一个 STATIC 库创建一个 STATIC 库

    我有一个 libfooi a 的集合 libfoo1 a libfoo2 a libfoo3 a 使用工厂 带有静态代码 有一个公共接口来创建 C 对象 使用 CMake 我选择其中之一 并创建一个链接它并添加所有内容的 libfooWra
  • 验证 iOS 应用程序时出现 com.apple.developer.linked-domains 问题

    当我在 Xcode 中使用 Organizer 验证我的项目时 出现以下错误 无效的代码签名权利 你的申请包的签名包含代码签名权利iOS 上不支持的 具体来说 值 for key com apple developer associated
  • 为什么我不能在 func Swift 中使用 self

    我试图自行将 SKSpriteNodes 添加到函数中的视图中 但 Xcode 不允许我这样做 它给了我错误 使用未解析的标识符 self func indicate if test 0 var large CGFloat largest
  • 修剪 UIImage 边框

    这是我想要修剪的图像的示例 我想去掉图像周围的边框 在本例中是顶部和底部的黑条 我在Github上找到了一个库 CKImageAdditions https github com cmkilger CKImageAdditions 但是它似
  • 使用react-native使用WebView设置用户代理

    我想修改 WebView 中的用户代理字符串 以便在服务器端我可以检测到请求来自我的反应本机应用程序 我想使用 WebView 中的 source 属性来做到这一点 对于 IOS 和 Android 我该如何执行此操作 您只需将其设置为 W
  • 是否可以使用 UITableViewStylePlain 禁用 UITableView 中的浮动标题?

    我正在使用一个UITableView布局内容 页面 我使用表视图的标题来布局某些图像等 如果它们不浮动而是保持静态 就像样式设置为时那样 我更喜欢它UITableViewStyleGrouped 其他则使用UITableViewStyleG
  • phonegap:基于 cookie 的身份验证 (PHP) 不起作用 [webview]

    我正在开发一个移动网络应用程序 使用 sencha touch HTML5 和 Phonegap 作为包装器 我正在使用 PHP 身份验证 Cookie 和 ajax 请求 在 safari 或 chrome 上一切正常 但在使用phone

随机推荐

  • Struts 2重构代码以避免OGNL静态方法访问

    Struts 2 2 3 20 提到 将禁用对从表达式访问静态方法的支持 很快 请考虑重构您的应用程序 以避免进一步 问题 我们在验证器中使用了 OGNL 静态调用 ExpressionValidator expression foo ba
  • Spark SQL 中按日期分组的聚合

    我有一个包含时间戳的 RDDtime长类型 root id string nullable true value1 string nullable true value2 string nullable true time long nul
  • 如何使用命令行将新的 MySQL 数据库结构从开发网站迁移到生产网站?

    我有两个网站环境 独立的服务器 Media Temple DV 开发和生产 我们开始在生产上构建站点 然后获得了开发服务器 因此我最初使用如下命令将生产数据库移动到开发 mysqldump a u USERNAME p DATABASE g
  • 涉及多个变量的程序的时间复杂度

    最近 我被要求创建一个程序来查找文本片段中的最佳匹配 我已经成功编写了这个程序 但我确实对其时间复杂度有疑问 问题定义如下 给定一个查询 查找文档中出现的查询词并突出显示最佳标记 我的程序花费的时间 O m n p here m 文档长度
  • Facebook Connect + jQuery Mobile + Phonegap 构建

    我试图了解如何使用脸书连接 登录 与jQuery 移动 and 音隙构建 但随着我搜索这些信息的次数越多 我就越感到困惑 我已经在 Facebook 上创建了我的应用程序 并且我有 API 编号 我不知道最好的方法是否是调用 PHP 页面
  • Ninject 和 XML 配置绑定

    我一直在互联网上搜索任何示例或入门文章 了解如何使用 XML 扩展与 Ninject 进行绑定 但我找不到任何帮助 任何人都可以向我提供一个很小的样本来说明我该如何做到这一点吗 提前致谢 我也找不到任何示例 但老实说源代码非常小 我只是下载
  • 更新 ListView 的 ObservableCollection 中一项的显示

    我有一个绑定到 ObservableCollection 的 ListView 有没有一种方法可以在 SomeModel 项的属性发生更改时更新单个单元格 而无需通过更改 ObservableCollection 来重新加载 ListVie
  • 使用 JNI 和 NDK 旋转位图

    背景 我决定 由于位图占用大量内存 很容易导致内存不足错误 因此我将把艰苦的 消耗内存的工作放在 C C 代码上 我用于旋转位图的步骤是 读取位图信息 宽度 高度 将位图像素存储到数组中 回收位图 创建一个相反大小的新位图 将像素放入新的位
  • DLL 类及其访问

    DLL 动态链接库 是否包含多个类 如果它包含如何在c 中的 net中分别获取类及其方法 在 NET 中 更常见的做法是将 DLL 视为程序集 单个程序集可以包含任意数量的类型 多个类 枚举 结构等 您可以通过在要使用这些类型的项目中添加对
  • c 从另一个文件复制文件权限

    复制文件的unix文件权限并将其设置到另一个文件的最简单方法是什么 有没有办法将文件的权限存储到变量 然后使用该变量将这些权限设置到另一个文件 当然 使用stat and chmod 可能需要root include
  • 如何处理AccessViolationException

    我在 net 应用程序中使用 COM 对象 MODI 我调用的方法抛出一个System AccessViolationException 它被 Visual Studio 拦截 奇怪的是 我将调用包装在 try catch 中 其中包含以下
  • JavaScript onclick

    我有这样的代码 a test a 稍后将代码添加到相同的锚标记中 例如 lnk document getElementById lnk1 lnk onclick function do something 现在发生的事情是 在第二段代码中
  • C#中的批处理文件执行

    我正在从 C 运行 Java 批处理文件 如果我通过双击运行它 它会成功执行 但如果我从 C 代码运行它 它会在线程中给出异常 主 线程中的异常 java lang noclassdeffoundError 原因是什么以及如何解决 我正在使
  • Restler总是返回未找到

    我被困在这里 在 wamp 中我运行一切并且工作正常 但是 当我尝试在 centos 盒子中安装我的 api 时 我总是收到 未找到 错误 我不知道还能做什么 即使 say hello 的例子也失败了 是否有处理 Restler 的 apa
  • 适用于 Android 的 Google API 缺少 Games.getGamesAuthToken

    在线的参考 for 适用于 Android 的 Google API 显示了公共方法摘要Games类包括 static PendingResult
  • 如何更新主键

    这是我的问题 我有 2 个表 工人 带柱 ID OTHER STAF 其中 ID 是主键 事务所 有专栏 FPK ID SOMETHING ELSE 其中 FPK 和 ID 的组合构成主键 并且 ID 是引用 WORKER ID 的外键 不
  • 从ggplot2中的图例中删除灰色

    我想从图例框中删除灰色 这是因为 geom smooth 中的 SE 不过 我想将 SE 保留在实际情节中 所以在图例框中 我只想要线条的颜色 而不是阴影 这是一个例子 library ggplot2 x lt rnorm 100 y lt
  • 需要正则表达式从字符串中删除所有字母

    我需要一个正则表达式来移动字符串 A Z 和 a z 中的所有字母 包括任何特殊字符在内的所有内容都应保持不变 我尝试了 d 但它只返回字符串中的数字 String asd dfdf4545D jasjkd jdjd56 desired o
  • 如何解决 Angular-cli 安装中的代码 ERR_INVALID_URL

    在我的 windows 10 中 我安装了 Nodejs v16 13 0 npm v8 1 0 当我尝试运行 npm install g angular cli 时 我收到这个错误 npm 错误 代码 ERR INVALID URL np
  • 使用 NumberFormatter 替换默认区域设置货币代码格式化货币

    在我的模型中 我将价格存储为NSDecimalNumber价值观 struct Item var price NSDecimalNumber eg 3 543 var currencyCode String eg USD 我想使用用户的正确