数値を純粋な英語の単語に変換しています。私は非常に奇妙な状況に遭遇しました。NSNumberFormatter
は、パラメータとして取られた数はオーバーフローを引き起こさない。NSNumberFormatter.string(from:)最大値を超えてもオーバーフローが発生しません - スウィフト
Iは、次のコードを有する:
import Foundation
var numberFormatter: NumberFormatter = NumberFormatter()
numberFormatter.numberStyle = .spellOut
var result: String?
result = numberFormatter.string(from: 999999999999999999)
print(result ?? "nil")
が、これは18014398509481984
< 999999999999999999
のと等価であるeighteen quadrillion fourteen trillion three hundred ninety-eight billion five hundred nine million four hundred eighty-one thousand nine hundred eighty-four
を印刷します。 18014398509481984
から単語を取得しようとすると、上記の文字列が返されます。 質問より多くを作るために、ここでInt
に保存されたとき
整数リテラル
9999999999999999999
オーバーフローSwift Sandbox Test次のとおりです。私は9
999..
への1以上を追加する場合は、それはメッセージでクラッシュわかりやすい。
私の実際の質問は:
180140398509481984
、numberFormatter.string(from:)
の制限のいくつかの種類である理由999999999999999999
がオーバーフローを引き起こさないが、ちょうどその制限を表示し、9999999999999999999
(と:は最初の試みの出力があると仮定すると余分な9)オーバーフローが発生しますか?
奇妙な。あなたが '180140398509481985'を使っても、スペルアウトされても' 180140398509481984 'が得られます。 – rmaddy
これも奇妙な制限です。それは2^57と2^58の間です。 – rmaddy
@rmaddyこれはまさに私が求めていることです。この関数には何らかの制限がありますか、それともInt/NSNumberの最大値に問題がありますか? –