Rumah  >  Artikel  >  Java  >  Bagaimana untuk Mengelakkan 'ArithmeticException: Pengembangan perpuluhan tanpa penamat' dalam Bahagian BigDecimal?

Bagaimana untuk Mengelakkan 'ArithmeticException: Pengembangan perpuluhan tanpa penamat' dalam Bahagian BigDecimal?

Patricia Arquette
Patricia Arquetteasal
2024-11-12 10:50:02684semak imbas

How to Avoid

Mengelakkan Pengembangan Perpuluhan Tidak Menamatkan dalam Pembahagian Perpuluhan Besar

Kelas BigDecimal Java direka untuk memudahkan operasi matematik ketepatan tinggi, tetapi kadangkala ia boleh lemparkan "ArithmeticException: Pengembangan perpuluhan tanpa penamat; tiada hasil perpuluhan yang boleh diwakili tepat" kesilapan. Pengecualian ini berlaku apabila membahagikan dua objek BigDecimal dan hasil bagi mempunyai pengembangan perpuluhan tak terhingga.

Sebab Pengecualian

Menurut dokumentasi BigDecimal, apabila tiada objek MathContext ( menentukan mod ketepatan dan pembundaran) disediakan, operasi aritmetik dilakukan dengan tepat. Jika hasil bagi mempunyai pengembangan perpuluhan yang tidak ditamatkan dan tidak boleh diwakili dengan tepat, pengecualian akan dilemparkan.

Contoh

BigDecimal a = new BigDecimal("1.6");
BigDecimal b = new BigDecimal("9.2");
a.divide(b) // raises the ArithmeticException

Betulkan

Untuk menyelesaikan isu ini, anda boleh menentukan objek MathContext dengan ketepatan bukan sifar dan pembundaran mod. Contohnya:

a.divide(b, 2, RoundingMode.HALF_UP)

Di sini, 2 menentukan skala (bilangan tempat perpuluhan) dan RoundingMode.HALF_UP menandakan kaedah pembundaran.

Maklumat Tambahan

  • Objek ArithmeticContext membolehkan anda mengawal pembundaran dan ketepatan pengiraan.
  • Jika hasil yang tepat tidak dapat diperoleh, operasi akan menggunakan mod pembundaran yang ditentukan untuk menganggarkan hasilnya.
  • Rujuk dokumentasi Java atau catatan blog ini untuk butiran lanjut: https://blog.frankel.ch/2013/09/avoid-arithmetic-exception-in-java-bigdecimals.html

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan 'ArithmeticException: Pengembangan perpuluhan tanpa penamat' dalam Bahagian BigDecimal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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