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
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!