Perbedaan antara nilai Java dan postgres BigDecimal/numerik

Saya menggunakan tipe BigDecimal dalam proyek Java. Saya mencoba menyimpannya menggunakan fungsi dengan bidang numerik. Java dan postgres memiliki nilai yang berbeda. Misalnya. Nilai 56,97 dari Java disimpan sebagai 56,9699999999999989 di postgres. Bagaimana cara mencegahnya?


person Bob    schedule 24.02.2020    source sumber
comment
Apa sebenarnya tipe data kolom di database?   -  person a_horse_with_no_name    schedule 24.02.2020
comment
..dan bagaimana Anda menyimpan nilai di sisi Java?   -  person Kayaman    schedule 24.02.2020
comment
@a_horse_with_no_name Di akhir ada kolom varchar   -  person Bob    schedule 24.02.2020
comment
@Kayaman Saya mendapatkannya dari json dan membuat kueri untuk menyimpan menggunakan fungsi postgres.   -  person Bob    schedule 24.02.2020
comment
Periksa pertanyaan ini: Jenis kolom PostgreSQL yang mana haruskah digunakan untuk menyimpan Java BigDecimal?   -  person Alex    schedule 24.02.2020
comment
Jangan pernah menyimpan angka di kolom varchar.   -  person a_horse_with_no_name    schedule 24.02.2020
comment
Bagaimana Anda mengonversi nilai varchar itu menjadi angka dalam pernyataan SELECT Anda?   -  person a_horse_with_no_name    schedule 24.02.2020
comment
@Bob alih-alih menjelaskan apa yang Anda lakukan, bagaimana dengan mengedit pertanyaan dan menampilkan bagian kode yang relevan. Anda telah melakukan satu kesalahan dengan menyimpan data numerik sebagai teks, namun Anda mungkin juga melakukan kesalahan lain.   -  person Kayaman    schedule 24.02.2020
comment
@a_horse_with_no_name inValue = inValueFloat::varchar(100); Apakah ini masalah utama?   -  person Bob    schedule 24.02.2020


Jawaban (1)


Jika Anda membuka dokumen postgresql: https://www.postgresql.org/docs/current/datatype-numeric.html

Saya kira Anda menggunakan presisi nyata atau ganda yang digambarkan sebagai "presisi variabel, tidak eksak".

Jika ingin lebih tepatnya, misalkan kita berbicara tentang uang atau sejenisnya, sebaiknya gunakan tipe numeric atau decimal:

NUMERIC(precision, scale)

Presisi adalah jumlah digit seluruhnya, sedangkan skala adalah jumlah digit pada bagian pecahan.

Misalnya angka 1234.567 mempunyai ketelitian tujuh dan skala tiga.

person peprumo    schedule 24.02.2020
comment
BigDecimal Java tidak nyata atau presisi ganda. - person Laurenz Albe; 24.02.2020
comment
Seperti yang saya sebutkan di PostgreSQL, presisi nyata atau ganda adalah tipe numerik di postges. Namun jika Anda membutuhkan data yang tepat, Anda sebaiknya menggunakan angka atau desimal. - person peprumo; 24.02.2020
comment
Ah, aku mengerti sekarang. OP tidak bermaksud numeric ketika dia mengatakan numerik. - person Laurenz Albe; 25.02.2020