我是靠谱客的博主 大气荷花,最近开发中收集的这篇文章主要介绍BigDecimal失真问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

   BigDecimal用于对超过16位有效位的数进行精确计算

常用构造方法

1、BigDecimal(int)

创建一个具有参数所指定整数值的对象

2、BigDecimal(double)

创建一个具有参数所指定双精度值的对象

3、BigDecimal(long)

创建一个具有参数所指定长整数值的对象

1、BigDecimal(String)

创建一个具有参数所指定字符串表示的数值的对象

问题分析

代码示例:

BigDecimal a = new BigDecimal(0.1);

BigDecimal b = new BigDecimal("0.1");

System.out.println("a:"+ a);

System.out.println("b:"+ b);

 输出:

a:0.1000000000000000055511151231257827021181583404541015625

b:0.1

原因分析:

参数类型为double的构造方法的结果有一定的不可预知性,实际等于 0.1000000000000000055511151231257827021181583404541015625,因为0.1无法准确的表示为double;

String的构造方法是完全可预知的,b的值即为预知的0.1。

常用方法:

  • add(BigDecimal)

BigDecimal对象中的值相加,返回BigDecimal对象

  • subtract(BigDecimal)

BigDecimal对象中的值相减,返回BigDecimal对象

  • multiply(BigDecimal)

BigDecimal对象中的值相乘,返回BigDecimal对象

  • divide(BigDecimal)

BigDecimal对象中的值相除,返回BigDecimal对象

  • toString()

将BigDecimal对象中的值转换成字符串

  • doubleValue()

将BigDecimal对象中的值转换成双精度数

  • floatValue()

将BigDecimal对象中的值转换成单精度数

  • longValue()

将BigDecimal对象中的值转换成长整数

  • intValue()

将BigDecimal对象中的值转换成整数

  • compareTo(BigDecimal2)

将调用该方法的BigDecimal对象与BigDecimal2做比较 

int a = bigdemical.compareTo(bigdemical2)

返回结果分析:

a = -1,表示bigdemical小于bigdemical2;
a = 0,表示bigdemical等于bigdemical2;
a = 1,表示bigdemical大于bigdemical2;

如果需要传如double类型的数值到BigDecimal,建议使用如下方法:

BigDecimal b1 = new BigDecimal(Double.toString(v1));

最后

以上就是大气荷花为你收集整理的BigDecimal失真问题的全部内容,希望文章能够帮你解决BigDecimal失真问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(70)

评论列表共有 0 条评论

立即
投稿
返回
顶部