Rumah > Java > javaTutorial > teks badan

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

Patricia Arquette
Lepaskan: 2024-11-12 10:50:02
asal
648 orang telah melayarinya

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
Salin selepas log masuk

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)
Salin selepas log masuk

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!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan