BigDecimal
Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处 理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用 java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运 算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。
BigDecimal.setScale用于格式化小数点
二、构造器描述
BigDecimal(int) 创建一个具有参数所指定整数值的对象。
BigDecimal(double) 创建一个具有参数所指定双精度值的对象。
BigDecimal(long) 创建一个具有参数所指定长整数值的对象。
BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象。
三、方法描述
add(BigDecimal) BigDecimal对象中的值相加,然后返回这个对象。
subtract(BigDecimal) BigDecimal对象中的值相减,然后返回这个对象。
multiply(BigDecimal) BigDecimal对象中的值相乘,然后返回这个对象。
divide(BigDecimal) BigDecimal对象中的值相除,然后返回这个对象。
toString() 将BigDecimal对象的数值转换成字符串。
doubleValue() 将BigDecimal对象中的值以双精度数返回。
floatValue() 将BigDecimal对象中的值以单精度数返回。
longValue() 将BigDecimal对象中的值以长整数返回。
intValue() 将BigDecimal对象中的值以整数返回。
四、格式化及例子
由于NumberFormat类的format()方法可以使用BigDecimal对象作为其参数,可以利用BigDecimal对超出16位有效数字的货币值,百分值,以及一般数值进行格式化控制。
以利用BigDecimal对货币和百分比格式化为例。首先,创建BigDecimal对象,进行BigDecimal的算术运算后,分别建立对货币和百分比格式化的引用,最后利用BigDecimal对象作为format()方法的参数,输出其格式化的货币值和百分比。
public static void main(String[] args) {
NumberFormat currency = NumberFormat.getCurrencyInstance(); //建立货币格式化引用
NumberFormat percent = NumberFormat.getPercentInstance(); //建立百分比格式化引用
percent.setMaximumFractionDigits(3); //百分比小数点最多3位
BigDecimal loanAmount = new BigDecimal("15000.48"); //贷款金额
BigDecimal interestRate = new BigDecimal("0.008"); //利率
BigDecimal interest = loanAmount.multiply(interestRate); //相乘
System.out.println("贷款金额:\t" + currency.format(loanAmount));
System.out.println("利率:\t" + percent.format(interestRate));
System.out.println("利息:\t" + currency.format(interest));
}
运行结果如下:
贷款金额: ¥15,000.48 利率: 0.8% 利息: ¥120.00
五、BigDecimal比较
BigDecimal是通过使用compareTo(BigDecimal)来比较的,具体比较情况如下:
public static void main(String[] args) {
BigDecimal a = new BigDecimal("1");
BigDecimal b = new BigDecimal("2");
BigDecimal c = new BigDecimal("1");
int result1 = a.compareTo(b);
int result2 = a.compareTo(c);
int result3 = b.compareTo(a);
System.out.println(result1);
System.out.println(result2);
System.out.println(result3);
}
打印结果是:-1、0、1,即左边比右边数大,返回1,相等返回0,比右边小返回-1。
例子:
setScale(1)表示保留以为小数,默认用四舍五入方式
setScale(1,BigDecimal.ROUND_DOWN)直接删除多余的小数位,如2.35会变成2.3
setScale(1,BigDecimal.ROUND_UP)进位处理,2.35变成2.4
setScale(1,BigDecimal.ROUND_HALF_UP)四舍五入,2.35变成2.4setScaler(1,BigDecimal.ROUND_HALF_DOWN)四舍五入,2.35变成2.3,如果是5则向下舍
相关推荐
在Java中,四舍五入可以通过多种方式实现,包括使用`Math`类中的方法以及`BigDecimal`类。 ### 使用Math类进行四舍五入 `Math`类是Java标准库的一部分,提供了多种数学函数,包括`floor()`和`ceil()`。这两个方法...
接下来,我们需要在返回给前端的实体类中的BigDecimal属性上添加`@JsonSerialize`注解,指定使用我们刚刚创建的序列化器: ```java import com.fasterxml.jackson.annotation.JsonSerialize; public class ...
### Java中的小数点与百分号处理技巧 在Java编程中,经常需要处理数值的格式化显示问题,尤其是在涉及财务、统计分析等场景时。本文将详细介绍如何利用Java中的`java.text.DecimalFormat`和`java.text.NumberFormat...
当数值超过了Java内置类型如`int`或`long`的表示范围时,我们需要使用特殊的数据类型来处理这些大整数。Java提供了一个名为`BigInteger`的类,位于`java.math`包下,专门用于处理任意精度的整数。本文将详细讲解如何...
### Java保留两位小数问题...综上所述,Java提供了多种方式来处理浮点数的格式化和精确计算问题,包括`BigDecimal`和`DecimalFormat`等工具类。通过合理选择合适的工具和技术,可以在实际开发中有效地解决这类问题。
4. **格式化显示**:为了保持价格始终保留小数点后十位,我们可以使用BigDecimal的setScale()方法。它接收两个参数,第一个是保留的小数位数,第二个是舍入模式。之后,我们再将格式化的BigDecimal转换回字符串,并...
- `setScale(2, BigDecimal.ROUND_HALF_UP)` 表示将该`BigDecimal`对象的小数点后保留2位,并采用四舍五入的方式处理第三位及以后的数字。 - 最终得到的`double f1`即为保留两位小数的结果。 #### 方法二:使用`...
在Java编程语言中,`BigDecimal` 类位于 `java.math` 包下,它提供了一种进行高精度和任意精度的十进制算术运算的方法。`BigDecimal` 是为那些需要精确数值计算的场景设计的,比如金融计算或会计应用,因为普通的 `...
- `setScale(int newScale, int roundingMode)`:设置新的标度(即小数点后保留的位数),并指定舍入模式。 3. **舍入模式**: - `BigDecimal.ROUND_UP`:远离零舍入,无论下一个数字是多少,都向上舍入。 - `...
`BigDecimal`类是Java中处理高精度数值的关键工具,它通过非标度值和标度的概念实现了精确的十进制计算。在进行货币计算或其他需要精确结果的场景下,`BigDecimal`是不可或缺的选择。在使用过程中,了解其特性和...
对于高精度计算和精确控制小数点后位数的需求,可以使用`java.math.BigDecimal`类。`BigDecimal`提供了多种构造函数和方法,可以方便地进行精确的数学运算,并控制结果的格式。 ```java import java.math....
在Java编程中,我们经常会遇到需要处理浮点数的情况,特别是当涉及到金融计算、科学计算等对精度有较高要求的领域时,如何有效地控制小数点后保留的位数显得尤为重要。本文将详细介绍在Java中限制小数位数的几种常见...
通过以上介绍,我们可以看到`java.lang.Math`类以及`java.math.BigInteger`和`java.math.BigDecimal`类在处理各种数学计算和大数运算时的强大功能和灵活性。这些工具不仅简化了开发者的代码编写过程,还提高了程序的...
通过以上知识点的深入解析,我们可以看到Java语言的强大和灵活性,不仅在基础数据类型处理上细致周全,在字符串操作、日期时间处理以及文件I/O方面也提供了丰富的API和工具类,为开发者提供了极大的便利。
根据提供的文件信息,我们可以提炼出几个关键的知识点:如何在JSP中正确计算并显示百分比、如何使用`BigDecimal`来精确控制小数点后的位数以及如何利用`DecimalFormat`格式化输出。 ### JSP中的百分比表示方法 ###...
`BigDecimal`是Java编程语言中`java.math`包内提供的一种高级数据类型,主要用于处理高精度的十进制数值。与基本数据类型`float`或`double`相比,`BigDecimal`能够提供更为准确的计算结果,避免因浮点数计算导致的...
在Java编程中,BigDecimal类是处理高精度浮点数计算的关键工具,特别是在金融或会计领域,需要精确到小数点后多位的情况下。然而,BigDecimal在实际应用中可能会引发一些问题,尤其是在进行数值比较时。 首先,我们...
本文将详细介绍四种在Java中保留小数的方法,分别是使用`BigDecimal`、`DecimalFormat`、`String.format()`以及`NumberFormat`类。 1. **使用BigDecimal进行四舍五入** `BigDecimal` 类提供了一个精确的浮点数运算...
`BigDecimal`是Java中用于处理高精度、大数值计算的类,提供了多种舍入模式。以下是一个例子: ```java double f = 3.1516; BigDecimal b = new BigDecimal(f); double f1 = b.setScale(2, BigDecimal.ROUND_...