Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Memformat Nilai Go float64 ke dalam Rentetan Lebar Tetap dengan Digit Ketara Maksimum?

Bagaimana untuk Memformat Nilai Go float64 ke dalam Rentetan Lebar Tetap dengan Digit Ketara Maksimum?

Patricia Arquette
Patricia Arquetteasal
2024-12-03 18:31:10750semak imbas

How to Format a Go float64 Value into a Fixed-Width String with Maximum Significant Digits?

Cara Menukar Float64 kepada Rentetan Lebar Tetap dengan Digit Ketara Maksimum dalam Go

In Go, apabila mencetak nilai float64 dalam tetapan jadual lebar, selalunya wajar untuk mengekalkan sebanyak mungkin digit bererti. Walau bagaimanapun, pemformatan lalai boleh mengakibatkan kehilangan ketepatan disebabkan oleh penukaran automatik kepada tatatanda saintifik untuk nombor yang besar.

Keperluan untuk Penyelesaian Pemformatan Tersuai

Untuk kes di mana kedua-dua notasi saintifik dan bentuk biasa tidak boleh diterima, pendekatan pemformatan tersuai diperlukan. Tumpuan utama hendaklah pada pengiraan ketepatan optimum yang sesuai dalam lebar yang ditentukan sambil mengekalkan digit bererti maksimum.

Penyelesaian Cadangan

Pelaksanaan berikut menawarkan penyelesaian yang mudah:


// format12 format x menjadi 12 aksara panjang.
func format12(x float64) rentetan {

if x >= 1e12 {
    s := fmt.Sprintf("%.g", x)
    format := fmt.Sprintf("%%12.%dg", 12-len(s))
    return fmt.Sprintf(format, x)
}

s := fmt.Sprintf("%.0f", x)
if len(s) == 12 {
    return s
}
format := fmt.Sprintf("%%%d.%df", len(s), 12-len(s)-1)
return fmt.Sprintf(format, x)

}

Penyelesaian ini menggunakan proses dua langkah:

  1. Menentukan Ketepatan:

    • Untuk nilai yang lebih besar daripada atau sama dengan 1e12, tatatanda saintifik dengan ketepatan yang sesuai digunakan.
    • Untuk nilai yang lebih kecil, bentuk biasa dengan ketepatan yang mencukupi dikira berdasarkan panjang integer bahagian.
  2. Mencipta Rentetan Pemformatan:

    • Berdasarkan ketepatan yang dikira, rentetan pemformatan tersuai dibina untuk memastikan yang dikehendaki tetap lebar.

Penggunaan dan Output Contoh

Untuk menunjukkan kefungsiannya, mari kita pertimbangkan beberapa nilai sampel:


fs := []float64{0, 1234.567890123, 0.1234567890123, 123456789012.0, 1234567890123.0,

9.405090880450127e+9, 9.405090880450127e+19, 9.405090880450127e+119}

untuk _, f := julat fs {

fmt.Println(format12(f))

}

Output:


0.000 0000000
0.1234567890
1234.5678901
123456789012
1.234568e 12
9405090880.5
9.405091e 19
9.40509e 119

Penyelesaian ini menyediakan pemformatan lebar tetap yang jelas dan tetap yang diingini untuk pemformatan lebar tetap yang jelas dan pra-digit yang diingini paparan ringkas float64 nilai dalam pelbagai senario.

Atas ialah kandungan terperinci Bagaimana untuk Memformat Nilai Go float64 ke dalam Rentetan Lebar Tetap dengan Digit Ketara Maksimum?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn