Java编程,⽤什么数据类型表⽰价格?
在Java中,float和double都表⽰浮点型数,所表⽰的浮点数是近似值,⽽不是精确的值,所以,这两种数据类型不适合作为价格的数据类型。Java语⾔提供另外⼀种数据类型BigDecimal,可以⽤来表⽰精确的浮点数。
package com.zhhvip;
import java.math.BigDecimal;
public class Test {
public static void main(String[] args) {
double d1 = 20.15;
double d2 = 10.10;
System.out.println("double类型的运⾏结果:"+(d1-d2));
BigDecimal bigDecimal1 = BigDecimal.valueOf(d1);
BigDecimal bigDecimal2 = BigDecimal.valueOf(d2);
System.out.println("BigDecimal类型的运⾏结果:"+(bigDecimal1.subtract(bigDecimal2)));
// 错误的使⽤⽅式
BigDecimal bigDecimal3 = new BigDecimal(d1);
java valueofBigDecimal bigDecimal4 = new BigDecimal(d2);
System.out.println("BigDecimal类型错误使⽤⽅式的运⾏结果:"+(bigDecimal3.subtract(bigDecimal4)));
// 正确的使⽤⽅式
BigDecimal bigDecimal5 = new BigDecimal("20.15");
BigDecimal bigDecimal6 = new BigDecimal("10.10");
System.out.println("BigDecimal类型正确使⽤⽅式的运⾏结果:"+(bigDecimal5.subtract(bigDecimal6)));
}
}
运⾏结果:
注意,new ⼀个BigDecimal时候,只有参数为String类型时候才能够正确表⽰,为什么BigDecimal.valueOf()⼜可以呢?因为BigDecimal.valueOf()本质上也是调⽤了参数类型为String的构造⽅法。
public static BigDecimal valueOf(double val) {
// Reminder: a zero double returns '0.0', so we cannot fastpath
/
/ to use the constant ZERO. This might be important enough to
// justify a factory approach, a cache, or a few private
// constants, later.
return new String(val));
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论