คำถามติดแท็ก bigdecimal

BigDecimal เป็นประเภทวัตถุตัวเลขใน Java ที่แสดงถึงตัวเลขทศนิยมด้วยความแม่นยำโดยพลการ

8
ArithmeticException:“ การขยายทศนิยมแบบไม่สิ้นสุด ไม่มีผลลัพธ์ทศนิยมที่สามารถแทนค่าได้แน่นอน”
ทำไมรหัสต่อไปนี้ยกข้อยกเว้นที่แสดงด้านล่าง BigDecimal a = new BigDecimal("1.6"); BigDecimal b = new BigDecimal("9.2"); a.divide(b) // results in the following exception. ข้อยกเว้น: java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.

6
สองเท่ากับ BigDecimal?
ฉันต้องคำนวณตัวแปรทศนิยมบางอย่างและเพื่อนร่วมงานของฉันแนะนำให้ฉันใช้BigDecimalแทนdoubleเพราะมันจะแม่นยำมากขึ้น แต่ฉันต้องการรู้ว่ามันคืออะไรและทำอย่างไรให้ได้ประโยชน์สูงสุดBigDecimal?


1
การปัด BigDecimal เป็น * always * มีทศนิยมสองตำแหน่ง
ฉันพยายามปัดเศษ BigDecimal ให้เป็นทศนิยมสองตำแหน่ง ฉันกำลังใช้ BigDecimal rounded = value.round(new MathContext(2, RoundingMode.CEILING)); logger.trace("rounded {} to {}", value, rounded); แต่มันไม่ได้ทำสิ่งที่ฉันต้องการอย่างสม่ำเสมอ: rounded 0.819 to 0.82 rounded 1.092 to 1.1 rounded 1.365 to 1.4 // should be 1.37 rounded 2.730 to 2.8 // should be 2.74 rounded 0.819 to 0.82 ฉันไม่สนใจตัวเลขที่สำคัญฉันแค่ต้องการทศนิยมสองตำแหน่ง ฉันจะทำสิ่งนี้กับ BigDecimal ได้อย่างไร หรือมีคลาส …

5
วิธีการเปลี่ยนตัวแยกทศนิยมของ DecimalFormat จากเครื่องหมายจุลภาคเป็นจุด / จุด?
ฉันมีวิธีบ้าเล็กน้อยที่แปลงค่า BigDecimal เป็นสตริงที่ดีและอ่านได้ private String formatBigDecimal(BigDecimal bd){ DecimalFormat df = new DecimalFormat(); df.setMinimumFractionDigits(3); df.setMaximumFractionDigits(3); df.setMinimumIntegerDigits(1); df.setMaximumIntegerDigits(3); df.setGroupingSize(20); return df.format(bd); } อย่างไรก็ตามมันยังสร้างตัวคั่นการจัดกลุ่มที่เรียก","ว่าค่านิยมทั้งหมดของฉันออกมาเช่นนี้ xxx,xxx ฉันต้องการให้ตัวคั่นเป็นจุดหรือจุดและไม่ใช่เครื่องหมายจุลภาค ใครบ้างมีเบาะแสของวิธีการบรรลุความสำเร็จเล็ก ๆ น้อย ๆ นี้? ฉันได้อ่านนี้และโดยเฉพาะอย่างยิ่งนี้ไปสู่ความตายในขณะนี้ แต่ฉันไม่สามารถหาวิธีที่จะได้รับการกระทำเช่นนี้ ฉันกำลังเข้าใกล้สิ่งนี้ในทางที่ผิดหรือไม่? มีวิธีที่สง่างามกว่านี้อีกไหมในการทำเช่นนี้? อาจเป็นวิธีแก้ปัญหาที่ใช้แทนหมายเลขท้องถิ่นที่แตกต่างกันเนื่องจากเครื่องหมายจุลภาคจะสมบูรณ์แบบตามมาตรฐานยุโรป


5
การเพิ่ม BigDecimals โดยใช้ Streams
ฉันมีคอลเลกชันของ BigDecimals (ในตัวอย่างนี้กLinkedList) ที่ฉันต้องการเพิ่มเข้าด้วยกัน เป็นไปได้ไหมที่จะใช้สตรีมสำหรับสิ่งนี้ ฉันสังเกตเห็นว่าStreamห้องเรียนมีหลายวิธี Stream::mapToInt Stream::mapToDouble Stream::mapToLong ซึ่งแต่ละsum()วิธีมีวิธีที่สะดวก แต่อย่างที่เรารู้floatและdoubleเลขคณิตเป็นความคิดที่เลว ดังนั้นมีวิธีที่สะดวกในการสรุป BigDecimals หรือไม่ นี่คือรหัสที่ฉันมี public static void main(String[] args) { LinkedList<BigDecimal> values = new LinkedList<>(); values.add(BigDecimal.valueOf(.1)); values.add(BigDecimal.valueOf(1.1)); values.add(BigDecimal.valueOf(2.1)); values.add(BigDecimal.valueOf(.1)); // Classical Java approach BigDecimal sum = BigDecimal.ZERO; for(BigDecimal value : values) { System.out.println(value); sum = sum.add(value); } System.out.println("Sum = …

4
BigDecimal เท่ากับ () และ CompareTo ()
พิจารณาคลาสทดสอบอย่างง่าย: import java.math.BigDecimal; /** * @author The Elite Gentleman * */ public class Main { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub BigDecimal x = new BigDecimal("1"); BigDecimal y = new BigDecimal("1.00"); System.out.println(x.equals(y)); System.out.println(x.compareTo(y) == 0 ? "true": "false"); } } …

11
นอกจากนี้สำหรับ BigDecimal
ฉันต้องการผลรวมอย่างง่ายที่มีค่าสกุลเงินบางอย่างที่แสดงในBigDecimalรูปแบบ BigDecimal test = new BigDecimal(0); System.out.println(test); test.add(new BigDecimal(30)); System.out.println(test); test.add(new BigDecimal(45)); System.out.println(test); เห็นได้ชัดว่าฉันไม่เข้าใจBigDecimalเลขคณิตดีดูผลลัพธ์ที่อยู่เบื้องหลัง Test 0 0 0 ใครช่วยฉันออกได้บ้าง
155 java  bigdecimal 

2
BigDecimal setScale และ round
ความแตกต่างระหว่างการโทรสองครั้งนี้คืออะไร? (มีผู้ใด?) // 1. new BigDecimal("3.53456").round(new MathContext(4, RoundingMode.HALF_UP)); // 2. new BigDecimal("3.53456").setScale(4, RoundingMode.HALF_UP);
140 java  bigdecimal 

8
การแปลง BigDecimal เป็น Integer
ฉันมีเมธอด Hibernate ซึ่งคืนค่า BigDecimal ให้ฉัน ฉันมีวิธี API อื่นที่ฉันต้องการส่งผ่านหมายเลขนั้น แต่ยอมรับจำนวนเต็มเป็นพารามิเตอร์ ฉันไม่สามารถเปลี่ยนประเภทผลตอบแทนหรือประเภทตัวแปรของทั้งสองวิธี ตอนนี้จะแปลง BigDecimal เป็นจำนวนเต็มและส่งต่อไปยังวิธีที่สองได้อย่างไร มีทางออกจากสิ่งนี้หรือไม่?


9
Safe String เพื่อการแปลง BigDecimal
ฉันกำลังพยายามอ่านค่า BigDecimal จากสตริง สมมติว่าฉันมี String นี้: "1,000,000,000.999999999999999" และฉันต้องการเอา BigDecimal ออกมา วิธีทำคืออะไร? ก่อนอื่นฉันไม่ชอบวิธีแก้ปัญหาโดยใช้การแทนที่สตริง (การแทนที่ลูกน้ำ ฯลฯ ) ฉันคิดว่าควรมีการจัดรูปแบบที่เรียบร้อยเพื่อทำงานนั้นให้ฉัน ฉันพบคลาส DecimalFormatter แล้วอย่างไรก็ตามเมื่อทำงานผ่านสองเท่า - ความแม่นยำจำนวนมากจะหายไป ฉันจะทำมันได้อย่างไร?
120 java  parsing  bigdecimal 

21
แปลงค่าวินาทีเป็นชั่วโมงนาทีวินาที?
ฉันพยายามแปลงค่าวินาที (ในตัวแปร BigDecimal) เป็นสตริงใน editText เช่น "1 ชั่วโมง 22 นาที 33 วินาที" หรืออะไรสักอย่าง ฉันได้ลองแล้ว: String sequenceCaptureTime = ""; BigDecimal roundThreeCalc = new BigDecimal("0"); BigDecimal hours = new BigDecimal("0"); BigDecimal myremainder = new BigDecimal("0"); BigDecimal minutes = new BigDecimal("0"); BigDecimal seconds = new BigDecimal("0"); BigDecimal var3600 = new BigDecimal("3600"); BigDecimal var60 …

8
วิธีใช้ตัวดำเนินการเปรียบเทียบเช่น>, =, <บน BigDecimal
ฉันมีคลาสโดเมนที่ตั้งค่าหน่วยราคาเป็นประเภทข้อมูล BigDecimal ตอนนี้ฉันกำลังพยายามสร้างวิธีเปรียบเทียบราคา แต่ดูเหมือนว่าฉันไม่มีตัวดำเนินการเปรียบเทียบในประเภทข้อมูล BigDecimal ฉันต้องเปลี่ยนประเภทข้อมูลหรือมีวิธีอื่นไหม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.