Mengendalikan Mata Wang Dalam Golang Dan Bahasa Pengaturcaraan Lain

PHPz
Lepaskan: 2024-07-18 01:21:31
asal
744 orang telah melayarinya

Handling Currency In Golang And Other Programming Language

Mengendalikan mata wang dalam bahasa pengaturcaraan ialah aspek kritikal pembangunan perisian, terutamanya untuk aplikasi yang berurusan dengan transaksi kewangan, e-dagang, perbankan dan sistem perakaunan. Perwakilan yang tepat dan manipulasi nilai mata wang adalah penting untuk mengelakkan kesilapan yang boleh membawa kepada percanggahan kewangan yang ketara.

Artikel ini akan meneroka amalan terbaik dalam mengendalikan mata wang dengan contoh dalam bahasa Go.

Ketepatan dan Ketepatan

Salah satu kebimbangan utama apabila berurusan dengan mata wang ialah ketepatan. Tidak seperti nombor titik terapung, yang boleh memperkenalkan ralat pembundaran, nilai mata wang memerlukan perwakilan yang tepat.

pertimbangkan mengikuti kod

package main

import "fmt"

func main() {

    var a float64 = 1.1
    var b float64 = 1.2
    var c float64 = 1.3
    fmt.Println(a + b + c)

}

Salin selepas log masuk

Kod di atas akan dicetak

3.5999999999999996
Salin selepas log masuk

Memandangkan ingatan komputer adalah terhad, kebanyakan bahasa pengaturcaraan termasuk Go store floating point berdasarkan standard IEEE-754 menggunakan 32 atau 64 bit, walaupun menggunakan ketepatan 64-bit adalah mustahil untuk menyimpan bilangan digit yang tidak terhingga, yang bermaksud ini nombor dibundarkan pada satu ketika, menjadikannya tidak tepat dan semakin banyak pengiraan dilakukan semakin menjadi tidak tepat.

Terdapat banyak cara untuk menangani masalah ini seperti menggunakan pustaka pihak ke-3 atau bahasa pengaturcaraan yang anda gunakan mempunyai sokongan asli. Dalam Go, terdapat beberapa perpustakaan, termasuk :

  • shopspring/perpuluhan
  • ericlagergren/perpuluhan
  • alpacahq/alpacadecimal
  • nilai/perpuluhan

kredit kepada kennfatt kerana menyusun senarai perpustakaan ini

Memilih Perpustakaan

Memilih perpustakaan yang sesuai untuk mengendalikan pengaturcaraan mata wang melibatkan beberapa pertimbangan. Berikut ialah panduan untuk membantu anda memilih pustaka perpuluhan yang sesuai untuk keperluan anda

1. Ketepatan dan Ketepatan

Pastikan perpustakaan menyokong ketepatan dan ketepatan sesuai dengan keperluan anda. Cari keupayaan ketepatan sewenang-wenangnya jika berurusan dengan nombor yang sangat besar atau pengiraan yang sangat tepat.

2. Kemudahan Penggunaan

Perpustakaan harus mempunyai dokumentasi yang jelas dan komprehensif. Ia sepatutnya mudah untuk disepadukan dengan asas kod dan aliran kerja anda yang sedia ada.

3. Prestasi

Pertimbangkan kesan prestasi, terutamanya jika anda melakukan sejumlah besar pengiraan atau beroperasi dalam persekitaran perdagangan frekuensi tinggi.

4. Ciri

Pastikan ciri sesuai dengan keperluan anda, daripada aritmetik asas seperti pembundaran, penambahan, penolakan pendaraban, pembahagian kepada operasi matematik yang lebih kompleks.

5. Komuniti dan Sokongan

Perpustakaan yang disokong baik dengan komuniti yang aktif boleh menjadi penting untuk mendapatkan bantuan dan mencari penyelesaian kepada masalah. Cari perpustakaan yang diselenggara dan dikemas kini secara aktif.

Menggunakan Pihak Ketiga

Artikel ini akan menggunakan govalues/perpuluhan perpustakaan pihak ketiga untuk contoh kod, memandangkan dokumen ringkas dan mudah dibaca serta sesuai dengan keperluan untuk demonstrasi kod

package main

import (
    "fmt"
    "github.com/govalues/decimal"
)

func main() {

    a, _ := decimal.Parse("1.1")
    b, _ := decimal.Parse("1.2")
    c, _ := decimal.Parse("1.3")

    a, _ = a.Add(b)
    a, _ = a.Add(c)
    fmt.Println(a.String())

}
Salin selepas log masuk

Kod di atas akan dicetak

3.6
Salin selepas log masuk

Dalam contoh di atas tidak mempunyai kehilangan ketepatan, masih kerana memori mempunyai kos dan tidak terhingga, digit selepas titik perpuluhan masih terhad, mengawal digit perpuluhan adalah penting, dalam contoh ini anda boleh menetapkan saiz menggunakan perpuluhan.ParseExact()

Menyimpan Dan Mendapatkan semula

Menyimpan dalam pangkalan data juga memerlukan pertimbangan yang teliti untuk mengekalkan ketepatan dan ketekalan.

Gunakan Jenis Lajur yang Sesuai

Kebanyakan pangkalan data hubungan mempunyai jenis khusus untuk nilai mata wang, seperti DECIMAL atau NUMERIC.

Elakkan Storan Titik Terapung

Sama seperti dalam pengaturcaraan, elakkan menyimpan nilai mata wang sebagai nombor titik terapung dalam pangkalan data.

Contohnya dalam MySQL

CREATE TABLE `users` (
    `id` int,
    `balance` decimal(6, 2)
);
Salin selepas log masuk

Demonstrasi penuh MySQL sedang berlangsung

package main

import (
    "database/sql"
    _ "github.com/go-sql-driver/mysql"
)

func main() {

    db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/test")
    if err != nil {
        panic(err)
    }

    _, err = db.Exec(`
        CREATE TABLE test (
            id int,
            balance_decimal decimal(16, 8),
            balance_float float(16, 8),
            PRIMARY KEY (id)
        );
    `)

    _, err = db.Exec("INSERT INTO test (id, balance_decimal, balance_float) VALUES (1, 1.1, 1.1)")
    _, err = db.Exec(`
        UPDATE test 
            SET 
                balance_decimal = balance_decimal + 1.2 , 
                balance_float   = balance_float + 1.2 
            WHERE id = 1;
    `)
}

Salin selepas log masuk

Kod di atas akan menghasilkan

id balance_decimal balance_float
1 2.30000000 2.29999995

Data Transfer

Data transfer also requires careful consideration of precision. a correct format is required

For example in JSON format, using type string guaranteed precision across any programing language

package main

import (
    "encoding/json"
    "log"
)

type Data struct {
    Decimal string  `json:"decimal"`
    Float   float64 `json:"float"`
}

func main() {

    payload := []byte(`{"decimal":"999.99999999999999","float":999.99999999999999}`)

    result := Data{}

    _ = json.Unmarshal(payload, &result)

    log.Print("Decimal: ", result.Decimal)
    log.Print("Float: ", result.Float)

}
Salin selepas log masuk

Above code would print

Decimal: 999.99999999999999
Float: 1000
Salin selepas log masuk

Conclusion

Handling currency in programming languages requires careful attention to detail to ensure precision, accuracy, and consistency. By using appropriate data types, libraries, and best practices, developers can avoid common pitfalls and ensure their applications handle currency correctly. Proper handling of currency not only prevents financial errors but also enhances user trust and confidence in the application.

There's no single best library for everyone. Each project has different needs. You should think about what's good and bad about each library based on what your project requires.

External Link

  • Full Code Example
  • govalues/decimal Repo
  • shopspring/decimal Repo
  • ericlagergren/decimal Repo
  • alpacahq/alpacadecimal Repo

Atas ialah kandungan terperinci Mengendalikan Mata Wang Dalam Golang Dan Bahasa Pengaturcaraan Lain. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!