Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mencetak Nombor Float64 dalam Go dengan Lebar Tetap dan Digit Ketara Maksimum?

Bagaimana untuk Mencetak Nombor Float64 dalam Go dengan Lebar Tetap dan Digit Ketara Maksimum?

Barbara Streisand
Lepaskan: 2024-12-04 01:47:10
asal
696 orang telah melayarinya

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

Mencetak Nombor Float64 dengan Lebar Tetap dan Digit Ketara

Bayangkan anda perlu mencetak nombor float64 dalam jadual dengan lebar tetap 12 aksara dan bilangan maksimum yang mungkin bagi digit bererti. Pertimbangkan contoh berikut:

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"
Salin selepas log masuk

Seperti yang anda lihat, fungsi fmt.Printf lalai dengan penentu format .6g mungkin sama ada memotong digit bererti atau menggunakan tatatanda saintifik, mengakibatkan kehilangan ketepatan. Adakah terdapat cara untuk mencapai pemformatan yang diingini menggunakan fungsi perpustakaan standard?

Pemformatan Tersuai untuk Penyelamat

Tiada fungsi perpustakaan standard mudah yang betul-betul memenuhi keperluan kami. Walau bagaimanapun, kami boleh membangunkan fungsi pemformatan tersuai yang mengambil kira lebar yang diingini dan digit bererti maksimum. Begini cara kita mendekati perkara ini:

  1. Semak sama ada nombor itu lebih besar daripada atau sama dengan 1e12 kerana ini ialah titik perubahan antara bentuk biasa dan tatatanda saintifik.
  2. Untuk bentuk biasa, tentukan bilangan digit pecahan yang muat dalam lebar yang dikehendaki. Bina rentetan format dengan sewajarnya menggunakan Sprintf untuk menentukan kedua-dua lebar dan kejituan.
  3. Untuk tatatanda saintifik, semak lebar eksponen (cth., e 1, e 10, e 100) dan hitung ketepatan maksimum yang mungkin untuk pecahan bahagian dalam baki lebar.

Berikut ialah contoh pelaksanaan dalam Pergi:

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)
}
Salin selepas log masuk

Menguji fungsi ini dengan pelbagai nilai float64 menghasilkan output berikut:

0.0000000000
0.1234567890
1234.5678901
123456789012
1.234568e+12
9405090880.5
9.405091e+19
9.40509e+119
Salin selepas log masuk

Ini menunjukkan cara mencetak nombor float64 dalam lebar tetap dengan bilangan maksimum yang mungkin ketara digit menggunakan pemformatan tersuai.

Atas ialah kandungan terperinci Bagaimana untuk Mencetak Nombor Float64 dalam Go dengan Lebar Tetap dan Digit Ketara Maksimum?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan