I need to separate Int values with commas every 3 digits in Swift.
I have tried to do this with NumberFormatter, but it sometimes returns unexpected results with large digits.
Why is this?

import Foundation

func format(_ num: Int) -> String {
  let formatter = NumberFormatter()
  formatter.numberStyle = .decimal
  formatter.groupingSeparator = ","
  formatter.groupingSize = 3
  return formatter.string(from: NSNumber(value: num)) ?? String(num)
}

let num1 =       199_999_999_999_999
let num2 =     1_999_999_999_999_999
let num3 =    19_999_999_999_999_999
let num4 =   199_999_999_999_999_999
let num5 = 1_999_999_999_999_999_999

print(format(num1))
print(format(num2))
print(format(num3))
print(format(num4))
print(format(num5))

// 199,999,999,999,999
// 1,999,999,999,999,999
// 20,000,000,000,000,000 <- unexpected results
// 199,999,999,999,999,999
// 1,999,999,999,999,999,999

推荐答案

这是NumberForMatter中的一个错误.(有很多.)试着打印Decimal(19_999_999_999_999_999).formatted().

Swift相关问答推荐

多个提取来计算核心数据中的记录

当我点击模拟器中的文本字段时,UIKit CLLocationButton崩溃

有没有一种方法可以迭代可编码的代码(例如,JSON解析中的每一项)?

传递给SWIFT ResultBuilder的闭包中结果类型的对象

在SWIFT中使用Objective-C struct 时出错(在作用域中找不到类型)

我正在try 通过代码设置节中页眉和页脚的高度,但它不起作用

出错-无法将季节类型的值转换为预期的参数类型';[水果]';

background Task(.backgroundTask)不适用于MySQL

如何强制创建新的UIViewControllerRenatable|更新Make UIViewController上的视图

如何让默认函数参数引用另一个函数参数?

使用 swift 的 Firebase 身份验证

Swift-SceneKit-无法从art.scnassets加载.scn文件

格式化大货币数字

RxSwift 中 Single.just(...) 和 Observable.just(...) 之间有区别吗?

关联满足约束时的快速协议方法

Xcode:方法参数的代码完成

如何在不阻塞 UI 更新的情况下使用 Swift Concurrency 在后台执行 CPU 密集型任务?

根据禁用与否更改 SwiftUI 中按钮的 colored颜色

UISearchbar TextField 的高度可以修改吗?

Swift 2.0 按属性对对象数组进行排序