
java解决精度问题
在进行浮点类数据计算的时候,浮点参与计算,会左移或右移n位,直到小数点移动到第一个有效数字的右边。于是11.9在转化为二进制后 小数点左移3位,就得到1. 011 11100110011001100110(精度丢失2)
于是最终浮点型运算出现了精度丢失误差。
解决方法:1.使用维护精度的二进制编码的十进制(BCD)库
2.用String来构造BigDecimal。(BigDecimal是java.math.BigDecimal类)
@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest(classes = ReportApplication.class)
public class PrecisionTest {
//鼓励用BigDecimal解决精度问题
@Test
public void test1() {
Double a = 12.0;
Double b = 11.9;
System.out.println("last result:" + (a - b));
System.out.println("=============");
///we use BigDecimal for resolve precision;
BigDecimal aMal = new BigDecimal(Double.toString(a));
BigDecimal bMal = new BigDecimal(Double.toString(b));
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)