0.9972のNumberFormatterの間違った結果

ポールT。

私はダブルを持っています:

let value = 0.99720317490866084

そして、二重拡張関数:

extension Double {
    func stringWithFixedFractionDigits(min: Int, max: Int) -> String {
        let formatter = NumberFormatter()
        formatter.minimumFractionDigits = min
        formatter.maximumFractionDigits = max
        formatter.minimumIntegerDigits = 1
        let numberObject = NSNumber(value: self)
        return formatter.string(from: numberObject) ?? "\(self)"
    }
}

私が使用する場合:

value.stringWithFixedFractionDigits(min: 2, max: 2)

取得します1.00取得したい0.99

何を変更できますか?

レオ・ダバス

NumberFormatterの丸めモードプロパティを.downに設定する必要があります。

formatter.roundingMode = .down

新しいNSNumberオブジェクトを作成する必要はないことに注意してください。DoubleからNSNumberに安全にキャストするか、string(for: Any)代わりにメソッドを使用できます別の方法として、プロトコルFloatingPointを拡張して、すべてのFloatタイプで使用できるようにすることができます。

extension Formatter {
    static let number = NumberFormatter()
}
extension FloatingPoint {
    func formattedWithFractionDigits(minimum: Int = 2, maximum: Int = 2, minimumIntegerDigits: Int = 1, roundingMode: NumberFormatter.RoundingMode = .halfEven) -> String {
        Formatter.number.roundingMode = roundingMode
        Formatter.number.minimumFractionDigits = minimum
        Formatter.number.maximumFractionDigits = maximum
        Formatter.number.minimumIntegerDigits = minimumIntegerDigits
        return Formatter.number.string(for: self) ?? ""
    }
}


0.9972031749.formattedWithFractionDigits()                                              // 1.00
0.9972031749.formattedWithFractionDigits(roundingMode: .down)                           // "0.99"
0.9972031749.formattedWithFractionDigits(minimumIntegerDigits: 0, roundingMode: .down)  // ".99"

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

錆:モジュール関数から結果を返す:型引数の数が間違っている:予期される2、見つかった0

分類Dev

ApplicationControllerで認証された結果、「引数の数が間違っている(1が指定され、0が必要)」かどうかを確認する

分類Dev

ELSE0でのMySQLAVGの誤った結果

分類Dev

strtotimeのPHPの間違った結果

分類Dev

sin()を{1、0、-1}に近似すると、間違った結果が得られます

分類Dev

Joda Time toDate()の間違った結果

分類Dev

SciPymedfiltの間違った結果

分類Dev

sizeofの間違った結果

分類Dev

Pythonの間違った乗算結果

分類Dev

sympy統合の間違った結果

分類Dev

間違ったクイズの結果

分類Dev

間違った式の結果linq

分類Dev

qSinとqCosの間違った結果

分類Dev

Lucene BooleanQuery の間違った結果

分類Dev

array_sumPHPの間違った結果

分類Dev

SQL Serverで0の場合でも、1時間あたりの結果

分類Dev

後方アルゴリズム隠れマルコフモデル、0番目のインデックス(終了ステップ)は間違った結果を生成します

分類Dev

STIntersectionの結果はSTIntersects = 0

分類Dev

Tkinterの間違った#座標:0または4が期待され、5が得られました

分類Dev

Geolocation.getCurrentPositionが間違った座標を返す(0; 0)

分類Dev

Python。間違った結果

分類Dev

Googleマップの距離行列の間違った結果

分類Dev

JavaScriptの間違った整数除算の結果

分類Dev

Javascriptの「基本的な」合計と小数の間違った結果

分類Dev

MySQLの2列の合計が間違った結果

分類Dev

PythonのBankAccount、間違った結果が得られました

分類Dev

PHPでsscanfを使用した場合の間違った結果

分類Dev

Pythonの条件が間違った結果をもたらす

分類Dev

渡された引数の数が間違っています(0):ループ/繰り返し関数のPersistentVector

Related 関連記事

  1. 1

    錆:モジュール関数から結果を返す:型引数の数が間違っている:予期される2、見つかった0

  2. 2

    ApplicationControllerで認証された結果、「引数の数が間違っている(1が指定され、0が必要)」かどうかを確認する

  3. 3

    ELSE0でのMySQLAVGの誤った結果

  4. 4

    strtotimeのPHPの間違った結果

  5. 5

    sin()を{1、0、-1}に近似すると、間違った結果が得られます

  6. 6

    Joda Time toDate()の間違った結果

  7. 7

    SciPymedfiltの間違った結果

  8. 8

    sizeofの間違った結果

  9. 9

    Pythonの間違った乗算結果

  10. 10

    sympy統合の間違った結果

  11. 11

    間違ったクイズの結果

  12. 12

    間違った式の結果linq

  13. 13

    qSinとqCosの間違った結果

  14. 14

    Lucene BooleanQuery の間違った結果

  15. 15

    array_sumPHPの間違った結果

  16. 16

    SQL Serverで0の場合でも、1時間あたりの結果

  17. 17

    後方アルゴリズム隠れマルコフモデル、0番目のインデックス(終了ステップ)は間違った結果を生成します

  18. 18

    STIntersectionの結果はSTIntersects = 0

  19. 19

    Tkinterの間違った#座標:0または4が期待され、5が得られました

  20. 20

    Geolocation.getCurrentPositionが間違った座標を返す(0; 0)

  21. 21

    Python。間違った結果

  22. 22

    Googleマップの距離行列の間違った結果

  23. 23

    JavaScriptの間違った整数除算の結果

  24. 24

    Javascriptの「基本的な」合計と小数の間違った結果

  25. 25

    MySQLの2列の合計が間違った結果

  26. 26

    PythonのBankAccount、間違った結果が得られました

  27. 27

    PHPでsscanfを使用した場合の間違った結果

  28. 28

    Pythonの条件が間違った結果をもたらす

  29. 29

    渡された引数の数が間違っています(0):ループ/繰り返し関数のPersistentVector

ホットタグ

アーカイブ