本文介紹了RoundingMode.UNNECESSARY引發(fā)異常的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!
問(wèn)題描述
我寫這段代碼是為了測(cè)試BigDecimal
的運(yùn)行情況,但發(fā)現(xiàn)RoundingMode.UNNECESSARY
拋出了異常。有誰(shuí)能解釋一下原因嗎?
public class TestRounding2 {
public static void main(String args[]) {
Locale swedish = new Locale("sv", "SE");
BigDecimal pp; //declare variable pp=pounds pence
NumberFormat swedishFormat = NumberFormat.getCurrencyInstance(swedish);
Scanner scan = new Scanner(System.in);
System.out.println("ENTER POUNDS AND PENCE TO AT LEAST FIVE DECIMAL PLACES :");
pp = scan.nextBigDecimal();
BigDecimal pp1 = pp.setScale(2, RoundingMode.HALF_EVEN);
System.out.println("HALF_EVEN: £ " + pp1.toString());
System.out.println(swedishFormat.format(pp1));
BigDecimal pp2 = pp.setScale(2, RoundingMode.FLOOR);
System.out.println("FLOOR: £ " + pp2.toString());
System.out.println(swedishFormat.format(pp2));
BigDecimal pp3 = pp.setScale(2, RoundingMode.CEILING);
System.out.println("CEILING £: " + pp3.toString());
System.out.println(swedishFormat.format(pp3));
BigDecimal pp4 = pp.setScale(2, RoundingMode.HALF_DOWN);
System.out.println("HALF DOWN £: " + pp4.toString());
System.out.println(swedishFormat.format(pp4));
BigDecimal pp5 = pp.setScale(2, RoundingMode.HALF_UP);
System.out.println("HALF UP: £ " + pp5.toString());
System.out.println(swedishFormat.format(pp5));
BigDecimal pp6 = pp.setScale(2, RoundingMode.UP);
System.out.println("UP: £ " + pp6.toString());
System.out.println(swedishFormat.format(pp6));
BigDecimal pp7 = pp.setScale(2, RoundingMode.DOWN);
System.out.println("DOWN: £ " + pp7.toString());
System.out.println(swedishFormat.format(pp7));
BigDecimal pp8 = pp.setScale(2, RoundingMode.UP);
System.out.println("UP: " + pp8.toString());
System.out.println(swedishFormat.format(pp8));
}
}
推薦答案
這是精心設(shè)計(jì)的。請(qǐng)參閱javadoc:
舍入模式,用于斷言請(qǐng)求的操作具有完全相同的
結(jié)果,因此不需要舍入。如果此舍入模式為
在產(chǎn)生不準(zhǔn)確結(jié)果的操作上指定,則
引發(fā)了{(lán)@code ArithmeticException}。
此模式專門用于在有可循環(huán)的東西時(shí)引發(fā)異常。
個(gè)例子。下一步代碼不會(huì)引發(fā)異常。
BigDecimal pp = new BigDecimal(7);
pp.setScale(2, RoundingMode.UNNECESSARY);
System.out.println(pp);
將7
更改為小數(shù)會(huì)導(dǎo)致異常,因?yàn)楝F(xiàn)在需要對(duì)其進(jìn)行舍入:
BigDecimal pp = new BigDecimal(7.1);
pp.setScale(2, RoundingMode.UNNECESSARY);
// java.lang.ArithmeticException: Rounding necessary
System.out.println(pp);
這篇關(guān)于RoundingMode.UNNECESSARY引發(fā)異常的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,