在Java中,BigDecimal类提供了多种方法来进行任意精度的取整操作。以下是一些常用的取整方法:
setScale(int newScale, RoundingMode roundingMode)这是最常用的取整方法,可以指定新的小数位数和舍入模式。
import java.math.BigDecimal;
import java.math.RoundingMode;
public class BigDecimalExample {
public static void main(String[] args) {
BigDecimal number = new BigDecimal("123.456789");
// 保留两位小数,四舍五入
BigDecimal roundedNumber = number.setScale(2, RoundingMode.HALF_UP);
System.out.println(roundedNumber); // 输出: 123.46
// 保留两位小数,向下取整
roundedNumber = number.setScale(2, RoundingMode.DOWN);
System.out.println(roundedNumber); // 输出: 123.45
// 保留两位小数,向上取整
roundedNumber = number.setScale(2, RoundingMode.UP);
System.out.println(roundedNumber); // 输出: 123.46
// 保留两位小数,向零取整
roundedNumber = number.setScale(2, RoundingMode.CEILING);
System.out.println(roundedNumber); // 输出: 123.46
// 保留两位小数,向负无穷取整
roundedNumber = number.setScale(2, RoundingMode.FLOOR);
System.out.println(roundedNumber); // 输出: 123.45
}
}
setScale(int newScale)这个方法默认使用RoundingMode.HALF_UP进行舍入。
import java.math.BigDecimal;
public class BigDecimalExample {
public static void main(String[] args) {
BigDecimal number = new BigDecimal("123.456789");
// 默认四舍五入,保留两位小数
BigDecimal roundedNumber = number.setScale(2);
System.out.println(roundedNumber); // 输出: 123.46
}
}
movePointRight(int n) 和 movePointLeft(int n)这两个方法可以移动小数点的位置,从而实现取整效果。
import java.math.BigDecimal;
public class BigDecimalExample {
public static void main(String[] args) {
BigDecimal number = new BigDecimal("123.456789");
// 向右移动两位小数点,相当于乘以100
BigDecimal movedRight = number.movePointRight(2);
System.out.println(movedRight); // 输出: 12345.6789
// 向左移动两位小数点,相当于除以100
BigDecimal movedLeft = number.movePointLeft(2);
System.out.println(movedLeft); // 输出: 1.23456789
}
}
stripTrailingZeros()这个方法可以去除BigDecimal对象末尾的零。
import java.math.BigDecimal;
public class BigDecimalExample {
public static void main(String[] args) {
BigDecimal number = new BigDecimal("123.4500");
// 去除末尾的零
BigDecimal strippedNumber = number.stripTrailingZeros();
System.out.println(strippedNumber); // 输出: 123.45
}
}
BigDecimal是不可变的,每次操作都会返回一个新的BigDecimal对象。divide(BigDecimal divisor, int scale, RoundingMode roundingMode)方法来指定精度和舍入模式,以避免ArithmeticException。import java.math.BigDecimal;
import java.math.RoundingMode;
public class BigDecimalExample {
public static void main(String[] args) {
BigDecimal dividend = new BigDecimal("1");
BigDecimal divisor = new BigDecimal("3");
// 指定精度和舍入模式
BigDecimal result = dividend.divide(divisor, 10, RoundingMode.HALF_UP);
System.out.println(result); // 输出: 0.3333333333
}
}
通过这些方法,你可以灵活地对BigDecimal对象进行任意精度的取整操作。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。