文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java中关于double、Double相关问题总结

2023-08-17 20:14

关注

读者须知:这块建立在你的数值在double范围内的,不然造成精度丢失,合理选择接收数据类型,如BigDecimal类型解决问题,这里只做double相关介绍。特别需要注意的是两个浮点数的算术运算
会有精度损失的,总之一句话,浮点数你要想精度不丢失一律用BigDecimal,且构造选用String的构造 Java NumberFormat格式化float类型的bug

double是基本数据类型,而Double实际上是一个包装类,内置有很多方法。

如果数据只是一个普通的浮点类型,两种都可以使用。有一个不一样的是Double可以返回null值。

        double money = 0.0d;        double money1 = 0.0;        double money2;        //System.out.println(money2);//编译不通过,你必须的有默认值        double money3;        money2 = money;        //money2 = money3;//编译不通过,你必须的有默认值        Double mon;        //System.out.println(mon);//编译不通过        Double mon1;        //mon1 = mon;// 编译不通过        mon = null;        mon1 = mon;        mon = 0.0d;        //Double a = 10;//编译不通过        Double a1 = 10d;        Double a1 = 10.0;        //规范声明如下:然后再去赋值        double truedouble = 0.0;        Double trueDouble = null;

使用equals()检查两个对象的相等性。==检查2个引用是否引用内存中的同一对象。
内容检查仅对检查基元类型时的==可靠。对于对象类型,最好使用equals方法

double a = 1.0;double b = 1.0;Double c = 1.0;Double d = 1.0;System.out.println(a == b);  // trueSystem.out.println(c == d);  // falseSystem.out.println(c.equals(d));  // true
double是原始元素,因此其默认值将为0。 另一方面,Double变量是对象,因此其默认值将为null。double是原始类型。 当用作数组中的元素时,如果没有其他默认值,则Java编译器将使用0.0。Double是参考类型。 当您将其用作数组中的元素时,Java编译器将其初始化为一个对象,并且数组中每个对象的默认值为null。double是一个类,double是一个原始类型Double类将原始类型double的值包装在对象中。类型为Double的对象包含单个类型为double的字段。

在JDK1.5以后,二者可以直接相互赋值,称为自动拆箱和自动装箱。如果是这样,可以用Double中的方法,将包装类转为基本数据类型。
java中double与Double的互转

        double d = 10;        Double D = new Double(d);        Double a = 10.0;        double v = a.doubleValue();

声明double变量的时候,加d与不加d有什么区别

默认情况下,赋值运算符右侧的实数被视为 double。 但是,如果希望整数被视为 double,  请使用后缀 d 或 D

也就是说,对于小数来说 没有区别,默认就是double型的。
后面那个d一般用于整数的,比如:double v = 123d; 把123看成浮点数123.0

在这里插入图片描述
更加深入了解请参考我这篇博文

在这里插入图片描述

BigDecimal、Double、String之间的互转

这篇博文有对应方法,可搜索关键字快速锁定到对应内容

java将double型数据转化为String类型

这块说这个只要是把double弄成String后,在new BigDecimal(StringDouble)来进行一些需要精度计算的场合。

使用 String.valueOf() 方法使用 Double.toString() 方法
double number = 123.456; String output1 = String.valueOf(number);        String output2 = Double.toString(number);        String output3 = number+"";
       public static BigDecimal DoubleToBigDecimal(double v) {        return new BigDecimal(Double.toString(v));    }        public static String DoubleToString(double v) {        return Double.toString(v);    }

将字符串转换为 double 类型的数值

String str = "56.7809";double num = Double.parseDouble(str); // 如果字符串中包含非数值类型的字符,则程序执行将出现异常。

java double转String时消除使用科学计数

Double整数部分超7位用科学计数法表示
在这里插入图片描述

    public static String parseString(Object str){        String returnValue = "";        try {            returnValue = new BigDecimal(String.valueOf(str)).toString();            if(StringUtils.endsWith(returnValue, ".0")) {                returnValue = StringUtils.removeEnd(returnValue, ".0");            }        } catch (Exception e) {            returnValue = ObjectUtils.toString(str);        }        return returnValue;    }

将double类型数据转换成long类型数据

将double类型数据转换成int类型数据

        double doubleValue = 82.94; // 82.14        int intValue = (int) doubleValue; // 82        //它将截断小数点后的值。它不会四舍五入,如果需要四舍五入,你就先给他四舍五入后在转成int        System.out.println("intValue: "+intValue);        Double aDouble = new Double(doubleValue);        System.out.println(aDouble.intValue());        Double a = 2.3 * 100;        int i = new Double(a).intValue();        System.out.println(i);//229        System.out.println(new DecimalFormat("0").format(a));//230    }

java中double型数据如何设置舍入策略

这一块核心思想,把double转String,然后去用BigDecimal的7种舍入策略即可,BigDecimal的舍入策略参看我这篇博文

比较两个指定的 double值

在Java中int类型数据的大小比较可以使用双等号,double类型则不能使用双等号来比较大小,如果使用的话得到的结果可能不相等,即使两者的精度是相同的也不可以。
Java中double类型大小比较的五种方法
我这里给出我认为好的规范的方法:
核心思想是使用BigDecimal的compareTo
为了防止精度损失,①把double转String, ②String转BigDecimal
为了方便我下面直接写好方法,直接传参笔记即可。
在这里插入图片描述

    public static int compareToSize(String num1, String num2) {        BigDecimal bdL = new BigDecimal(num1);        BigDecimal bdR = new BigDecimal(num2);        return bdL.compareTo(bdR);    }    public static int compareToSize(double num1, double num2) {        String s1 = Double.toString(num1);        String s2 = Double.toString(num2);        return compareToSize(s1,s2);    }

double值取反

这块简单做法是*(-1),但是不知道会不会造成精度损失

 double a = -0.23; double v = a * (-1);

保险做法就是还是前面说的,转String 转成BigDecimal来*(-1) 或者人家BigDecimal有个取反的方法negate()

        BigDecimal bigDecimal = new BigDecimal("-0.23");        BigDecimal negate = bigDecimal.negate();

double值取绝对值

     double abs = Math.abs(-0.236666666666666);

double格式化千位分割符

在这里插入图片描述

        public static String toStringWithTwo(double v) {//        DecimalFormat format = new DecimalFormat("###,###.##");//保留两位遇0舍        DecimalFormat format = new DecimalFormat("###,###.00");//保留2位不足位数补0        return format.format(v);    }

double任意格式化

参考这篇博文,搜索:DecimalFormat数字格式方法总结

Double 类的常用常量

MAX_VALUE:值为 1.8E308 的常量,它表示 double 类型的最大正有限值的常量。MIN_VALUE:值为 4.9E-324 的常量,它表示 double 类型数据能够保持的最小正非零值的常量。NaN:保存 double 类型的非数字值的常量。NEGATIVE_INFINITY:保持 double 类型的负无穷大的常量。POSITIVE_INFINITY:保持 double 类型的正无穷大的常量。SIZE:用秦以二进制补码形式表示 double 值的比特位数。TYPE:表示基本类型 double 的 Class 实例。

来源地址:https://blog.csdn.net/liu918458630/article/details/127361899

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯