ความแตกต่างระหว่างค่า Java และ postgres ของ BigDecimal/ตัวเลข

ฉันใช้ประเภท BigDecimal ในโครงการ Java ฉันกำลังพยายามบันทึกโดยใช้ฟังก์ชันที่มีช่องตัวเลข Java และ postgres มีค่าต่างกัน เช่น. ค่า 56.97 จาก Java บันทึกเป็น 56.9699999999999989 ใน postgres ฉันจะป้องกันได้อย่างไร?


person Bob    schedule 24.02.2020    source แหล่งที่มา
comment
ประเภทข้อมูลของคอลัมน์ในฐานข้อมูลคืออะไรกันแน่?   -  person a_horse_with_no_name    schedule 24.02.2020
comment
..และคุณจะบันทึกค่าบนฝั่ง Java ได้อย่างไร?   -  person Kayaman    schedule 24.02.2020
comment
@a_horse_with_no_name ในตอนท้ายจะมีคอลัมน์ varchar   -  person Bob    schedule 24.02.2020
comment
@Kayaman ฉันได้รับมันจาก json และทำการสืบค้นเพื่อบันทึกโดยใช้ฟังก์ชัน postgres   -  person Bob    schedule 24.02.2020
comment
ตรวจสอบคำถามนี้: ประเภทคอลัมน์ PostgreSQL ใด ควรจะใช้เพื่อจัดเก็บ Java BigDecimal?   -  person Alex    schedule 24.02.2020
comment
ไม่ต้อง ไม่เคยเก็บตัวเลขไว้ในคอลัมน์ varchar   -  person a_horse_with_no_name    schedule 24.02.2020
comment
คุณจะแปลงค่า varchar นั้นเป็นตัวเลขในคำสั่ง SELECT ของคุณได้อย่างไร   -  person a_horse_with_no_name    schedule 24.02.2020
comment
@Bob แทนที่จะอธิบายว่าคุณกำลังทำอะไรอยู่ แก้ไขคำถามและแสดงส่วนที่เกี่ยวข้องของโค้ดได้อย่างไร คุณกำลังทำสิ่งหนึ่งผิดโดยการจัดเก็บข้อมูลตัวเลขเป็นข้อความ แต่คุณอาจทำสิ่งอื่นผิดเช่นกัน   -  person Kayaman    schedule 24.02.2020
comment
@a_horse_with_no_name inValue = inValueFloat::varchar(100); มันเป็นประเด็นหลักหรือไม่?   -  person Bob    schedule 24.02.2020


คำตอบ (1)


หากคุณไปที่เอกสาร postgresql: https://www.postgresql.org/docs/current/datatype-numeric.html

ฉันเดาว่าคุณกำลังใช้ความแม่นยำจริงหรือสองเท่าซึ่งอธิบายว่า "ความแม่นยำของตัวแปรไม่แน่นอน"

หากคุณต้องการให้ตรงทั้งหมด สมมติว่าเรากำลังพูดถึงเงินหรือสิ่งที่คล้ายกัน คุณควรใช้ประเภท numeric หรือ decimal:

NUMERIC(precision, scale)

ความเที่ยงตรงคือจำนวนหลักทั้งหมด ส่วนสเกลคือจำนวนหลักในส่วนของเศษส่วน

ตัวอย่างเช่น หมายเลข 1234.567 มีความแม่นยำเป็น 7 และมาตราส่วนเป็น 3

person peprumo    schedule 24.02.2020
comment
BigDecimal ของ Java ไม่ใช่ ความแม่นยำจริงหรือสองเท่า - person Laurenz Albe; 24.02.2020
comment
ฉันพูดถึง PostgreSQL ความแม่นยำจริงหรือสองเท่าเป็นประเภทตัวเลขใน postges แต่ถ้าคุณต้องการข้อมูลที่แม่นยำ คุณควรใช้ตัวเลขหรือทศนิยม - person peprumo; 24.02.2020
comment
อ๋อ ฉันเข้าใจแล้ว OP ไม่ได้หมายถึง numeric เมื่อเขาพูดเป็นตัวเลข - person Laurenz Albe; 25.02.2020