我不知道这里发生了什么,但我想格式化一个包含大整数的字符串。这个值很快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
答案 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))