Swift字符串%d格式化程序将大型Int转换为负数

时间:2017-02-25 21:11:04

标签: swift

我不知道这里发生了什么,但我想格式化一个包含大整数的字符串。这个值很快Int。然而,当我使用%d字符串格式化程序时,我得到的只是一个负的随机值。

let troublesomeIntVal: Int = 222773803005739009
print(String(format: "this is wrong: %d", troublesomeIntVal))
print(String(format: "but this works: %ld", troublesomeIntVal))

输出:

this is wrong: -244613119
but this works: 222773803005739009

2 个答案:

答案 0 :(得分:2)

以下https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html %d是“有符号32位整数” - 您的值不适合32位,它会溢出32位范围。

另一方面,

%ld处理NSInteger,其为64位,这也是swift Int的大小。

答案 1 :(得分:0)

我想,除了@ luk2302的答案之外,故事的士气是如果你在Swift中使用Int,不要使用%d字符串格式化器,请使用{ {1}} 如果它是64位整数

%ld

打印

let troublesomeIntVal1: Int = 222773803005739009
let troublesomeIntVal2: Int = 222773803005739009
print(String(format: "%d", troublesomeIntVal1))
print(String(format: "%ld", troublesomeIntVal2))