ホームページ > バックエンド開発 > Golang > Go で Float64 数値を固定幅と最大有効桁数で出力する方法

Go で Float64 数値を固定幅と最大有効桁数で出力する方法

Barbara Streisand
リリース: 2024-12-04 01:47:10
オリジナル
622 人が閲覧しました

How to Print Float64 Numbers in Go with Fixed Width and Maximum Significant Digits?

固定幅と有効桁を使用した Float64 数値の出力

テーブル内の float64 数値を 12 文字の固定幅で出力する必要があると想像してください。有効桁数の最大可能数。次の例を考えてみましょう。

fmt.Printf("%12.6g\n", 9.405090880450127e+119) //"9.40509e+119"
fmt.Printf("%12.6g\n", 0.1234567890123)        //"    0.123457"
fmt.Printf("%12.6g\n", 123456789012.0)         //" 1.23457e+11"
ログイン後にコピー

ご覧のとおり、.6g 形式指定子を指定したデフォルトの fmt.Printf 関数では、有効数字が切り捨てられるか、科学的表記法が使用されるため、精度が失われます。標準ライブラリ関数を使用して希望の書式設定を実現する方法はありますか?

救済のためのカスタム書式設定

要件を正確に満たす簡単な標準ライブラリ関数はありません。ただし、必要な幅と最大有効桁数を考慮したカスタム書式設定関数を開発できます。これにどのようにアプローチするかは次のとおりです:

  1. これは正規形式と科学的表記法の間の分岐点であるため、数値が 1e12 以上であるかどうかを確認します。
  2. 正規形式の場合、希望の幅内に収まる小数部の桁数を決定します。 Sprintf を使用して、幅と精度の両方を指定して、それに応じて書式文字列を構築します。
  3. 科学的表記法の場合、指数の幅 (e.g. e 1、e 10、e 100) を確認し、分数の最大可能精度を計算します。残りの幅内の部分。

次の実装例です。 Go:

import (
    "fmt"
)

func format12(x float64) string {
    if x >= 1e12 {
        exp := fmt.Sprintf("%.g", x)
        return fmt.Sprintf("%%12.%dg", 12-len(exp))
    }
    s := fmt.Sprintf("%.0f", x)
    if len(s) == 12 {
        return s
    }
    return fmt.Sprintf("%%%d.%df", len(s), 12-len(s)-1)
}
ログイン後にコピー

さまざまな float64 値を使用してこの関数をテストすると、次の出力が得られます。

0.0000000000
0.1234567890
1234.5678901
123456789012
1.234568e+12
9405090880.5
9.405091e+19
9.40509e+119
ログイン後にコピー

これは、float64 数値を有効桁数の最大値を使用して固定幅で出力する方法を示しています。カスタム書式設定を使用した数字。

以上がGo で Float64 数値を固定幅と最大有効桁数で出力する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート