精华内容
下载资源
问答
  • double : 双精度浮点数 两者主要区别如下: 01.在内存中占有字节数不同 单精度浮点数在机内存占4个字节 双精度浮点数在机内存占8个字节 02.有效数字位数不同 ...如果不声明,默认小数为double类型,所以如

    double : 双精度浮点数

    float:单精度浮点数

    两者的主要区别如下:

    1、在内存中占有的字节数不同

    单精度浮点数在机内存占4个字节

    双精度浮点数在机内存占8个字节

    2、有效数字位数不同

    单精度浮点数有效数字8位

    双精度浮点数有效数字16位

    3、数值取值范围

    单精度浮点数的表示范围:-3.40E+38~3.40E+38

    双精度浮点数的表示范围:-1.79E+308~-1.79E+308

    4、在程序中处理速度不同

    一般来说,CPU处理单精度浮点数的速度比处理双精度浮点数快

    如果不声明,默认小数为double类型,所以如果要用float的话,必须进行强转

    例如:float a=1.3; 会编译报错,正确的写法 float a = (float)1.3;或者float a = 1.3f;(f或F都可以不区分大小写)

    注意:float是8位有效数字,第7位数字将会四舍五入

    面试题:

    1、java中3*0.1==0.3将会返回什么?true还是false?

    false,因为浮点数不能完全精确的表示出来,一般会损失精度。

    2、java中float f = 3.4;是否正确?

    不正确,3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于向下转型会造成精度损失,因此需要强制类型转换float f = (float)3.4;或者写成 float f = 3.4f;才可以。

    展开全文
  • JAVA中有8种基本数据类型(boolean, byte, short, int, long, float, double, char),其中float和double都是浮点型,但平常我们需要表示货币金额或小数类型的数值时,不能用这两种类型,因为浮点型精确范围是不...

    1.精确小数类型需要用BigDecimal类型

    在JAVA中有8种基本数据类型(boolean, byte, short, int, long, float, double, char),其中float和double都是浮点型,但平常我们需要表示货币金额或小数类型的数值时,不能用这两种类型,因为浮点型的精确范围是不适用于日常的精确小数计算。

    我们需要使用的类型是java.math.BigDecimal类型。

    2.创建对象

    使用BigDecimal(String val)的构造方法创建对象

    如BigDecimal numA=new BigDecimal("0.6");,

    尽量不要用参数为float或double的BigDecimal创建对象,如BigDecimal numA=new BigDecimal(0.6);

    因为使用参数为float或double的BigDecimal创建对象会丢失精度,如

    BigDecimal bdTest = new BigDecimal(1.745);

    BigDecimal bdTest1 = new BigDecimal(0.745);

    bdTest = bdTest.setScale(2, BigDecimal.ROUND_HALF_UP);

    bdTest1 = bdTest1.setScale(2, BigDecimal.ROUND_HALF_UP);

    System.out.println("bdTest:" + bdTest); // 1.75

    System.out.println("bdTest1:" + bdTest1); // 0.74

    3.数值计算

    BigDecimal 类型不能用 +, -, *, / 来运算,需要用函数,如下:

    BigDecimal numA=new BigDecimal("0.6");

    BigDecimal numB=new BigDecimal("0.12");

    //加法

    System.out.println(numA.add(numB));//结果0.72

    //减法

    System.out.println(numA.subtract(numB));//结果0.48

    //乘法

    System.out.println(numA.multiply(numB));//结果0.072

    //除法

    System.out.println(numA.divide(numB));//结果5

    还有方法:divide(BigDecimal divisor, int scale, int roundingMode)

    divisor是除数,scale是精确度,roundingMode是结果的取值方式(如BigDecimal.ROUND_HALF_UP)。

    3.比较大小

    BigDecimal 类型不能用 >,< 来运算,需要用compareTo函数,返回值表示为0:相等,1:大于,-1:小于

    如下:

    BigDecimal numA=new BigDecimal("0.6");

    BigDecimal numB=new BigDecimal("0.12");

    System.out.println(numA.compareTo(numB));//结果为 1

    4.四舍五入

    最常用的是ROUND_HALF_UP(向上取整) 和ROUND_HALF_DOWN(向下取整)

    BigDecimal numA=new BigDecimal("0.625");

    BigDecimal numB=new BigDecimal("0.125");

    System.out.println(numA.setScale(2,BigDecimal.ROUND_HALF_UP));//结果0.63 

    System.out.println(numA.setScale(2,BigDecimal.ROUND_HALF_UP));//结果0.12

    ROUND_HALF_UP是最常用

    5.转为负数

    new BigDecimail().negate()     返回负数

     

    展开全文
  • java控制float类型的小数位数

    千次阅读 2014-03-16 16:35:47
    三个方法都可以 如下:    (一):这种方法方便,我就使用这种方法 ...(这里100就是2位小数点,如果要其它位,如4位,这里两个100改成10000) (二):这个方法也简单,不过还要再转成float型:  i


    三个方法都可以 如下:

     

     (一):这种方法方便,我就使用这种方法

       float   a   =  123.2334f;  
          float   b   =  (float)(Math.round(a*100))/100;(这里的100就是2位小数点,如果要其它位,如4位,这里两个100改成10000)

    (二):这个方法也简单,不过还要再转成float型:  
      import  java.text.DecimalFormat;       
      String   a   =   new  DecimalFormat("###,###,###.##").format(100.12345   );

    (三):这个也可以用

    float   ft   =   134.3435f; 
      int   scale   =   2;//设置位数  
      int   roundingMode   =   4;//表示四舍五入,可以选择其他舍值方式,例如去尾,等等.  
      BigDecimal   bd   =   new   BigDecimal((double)ft); 
      bd   =   bd.setScale(scale,roundingMode);  
      ft   =   bd.floatValue();  


    展开全文
  • Java中Double类型的小数保留 1.依托于DecimalFormat类 DecimalFormat类来自import java.text.DecimalFormat包,它继承于NumberFormat类,用于格式化十进制数,有了这一个类的存在,使得我们针对数值保留位数的处理变...

    Java中Double类型的小数保留

    1.依托于DecimalFormat类

    DecimalFormat类来自import java.text.DecimalFormat包,它继承于NumberFormat类,用于格式化十进制数,有了这一个类的存在,使得我们针对数值保留位数的处理变得十分方便。它的构造方法有三种形式,格式为

    //1.无参构造
    public DecimalFormat() {...}
    //2.有参构造
    public DecimalFormat(String pattern) {...}
    //3.多参构造
    public DecimalFormat (String pattern, DecimalFormatSymbols symbols) {...}
    

    它可在构造方法中传递符号,下面看一下具体符号的含义:

    符号 位置 本地化 描述
    0 数字 阿拉伯数字
    # 数字 如果不存在显示为空
    . 数字 小数分隔符
    - 数字 减号
    , 数字 分组分隔符
    E 数字 分隔科学计数法中的尾数和指数
    ; 子模式边界 分隔正数和负数子模式
    ' 前缀或后缀 用于在前缀或或后缀中为特殊字符加引号,
    例如 "'#'#" 将 123 格式化为 "#123"
    要创建单引号本身,请连续使用两个单引号:"# o''clock"
    % 前缀或后缀 乘以 100 并显示为百分数
    /u2030 前缀或后缀 乘以 1000 并显示为千分数
    (/u00A4) 前缀或后缀 货币记号,由货币符号替换。如果两个同时出现,
    则用国际货币符号替换。如果出现在某个模式中,
    则使用货币小数分隔符,而不使用小数分隔符。

    示例

    无参构造示例:

    DecimalFormat df = new DecimalFormat();
    System.out.println(df.format(1234.1234));// 1234.123 默认保留三位小数
    

    有参构造示例:

    DecimalFormat df1 = new DecimalFormat("0.0");
    DecimalFormat df2 = new DecimalFormat("#.#"); 
    DecimalFormat df3 = new DecimalFormat("000.000"); 
    DecimalFormat df4 = new DecimalFormat("###.###"); 
    System.out.println(df1.format(12.34));// 12.3
    System.out.println(df2.format(12.34));// 12.3
    System.out.println(df3.format(12.34));// 012.340
    System.out.println(df4.format(12.34));// 12.34
    

    更多示例查看:

    https://blog.csdn.net/gm_163/article/details/9499337

    2. 扩展(BigDecimal类)

    https://blog.csdn.net/z956281507/article/details/79188081

    Java中存储金额用什么数据类型?

    首先不能使用float和double存储,float和double浮点数,浮点数参与的运算通常伴随着因为无法精确表示而进行的近似或舍入(与计算机以二进制计算有关),所以导致结果会有丝毫的偏差,而涉及金额的计算是绝对不予许存在偏差的。我们可以使用BigDecimal来表示金额,或者是通过将金额的单位变小用整数来表示金额。

    浮点数运算参考:https://blog.csdn.net/qq_37236745/article/details/83513418

    BigDecimal参考:https://blog.csdn.net/qq_35868412/article/details/89029288

    coding:

    public class Main {
        public static void main(String[] args) {
            //1.浮点类型数据运算产生误差
            System.out.println(0.1+0.2);//0.30000000000000004
    		//2.使用BigDecimal
            BigDecimal bd1 = new BigDecimal("36");
            BigDecimal bd2 = new BigDecimal("12");
            System.out.println("加:"+bd1.add(bd2));
            System.out.println("减:"+bd1.subtract(bd2));
            System.out.println("乘:"+ bd1.multiply(bd2));
            System.out.println("除:"+ bd1.divide(bd2));
            /**
             * 加:48
             * 减:24
             * 加法:432
             * 加法:3
             */
        }
    }
    
    展开全文
  • 调用类BigDecimal中方法 double a = 4.127326; BigDecimal bd = new BigDecimal(a); double A = bd.setScale(2, bd.ROUND_HALF_UP).doubleValue(); // 将此 BigDecimal 转换为 double System.out.println(A); ...
  • import java.math.BigDecimal; public class DoubleUtil { /** * 提供精确加法运算。 * @param v1 被加数 * @param v2 加数 * @return 两个参数和 */ public static double add(double v1,...
  • 里主要讨论一下大数转小数,比如int类型转short类型小数转大数,如short 转 int不做讨论,需要朋友可以参考下
  • Double类型有以下几种保留小数的方式 一、BigDecimal方法 BigDecimal.ROUND_HALF_UP:四舍五入 BigDecimal.ROUND_HALF_DOWN:五舍六入 BigDecimal.ROUND_UP表示进位处理(就是直接加1) BigDecimal.ROUND_DOWN...
  • BigDecimal数据类型的保留小数的七种方法区别
  • // 四舍五入,保留number类型数值的... // 传入double类型的数值和想要保留的小数位数 private static double numberFormat(double number, int decimalDigit){ NumberFormat numberFormat = NumberFormat.get...
  • 在我们开发过程中,有时候会遇到double类型保留小数的问题。只要使用javaDecimalFormat方法即可。个人认为可以适用一切。最重要是它包含 9.554393812961175E-4这种类型。 下面我首先讲解一下这种数字什么...
  • import java.text.DecimalFormat; DecimalFormat df = new DecimalFormat("######0.00"); double d1 = 3.23456 double d2 = 0.0; double d3 = 2.0; df.format(d1); df.format(d2); df.format...
  • * @param str 小数类型的字符串 * @return 去掉小数点或多余0 */ public static String subZeroAndDot(String str) { if (str.indexOf(".") > 0) { str = str.replaceAll("0+?$", ""); str = str....
  • 发现用后台Java的float类型的数据8.88传入到前台用Flex的Number类型显示   时会出现8.880000000000123这个的数字解决方法如下: var num:Number = 8.880000000000123;    num.toFixed(2); 这样就会显示8.88...
  • java的double类型如何精确到一位小数? //分钟转小时vacationNum = (double)Math.round(vacationNum/60*10)/10.0;overTimeNum = (double)Math.round(overTimeNum/60*10)/10.0;依次类推:精确到3位小数: ...
  • Java处理Double类型的小数位保留问题

    万次阅读 2016-08-25 15:35:46
    无意中发现了一个巨牛人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看...import java.text.DecimalFormat; DecimalFormat df = new DecimalFormat("######0.00"); d...
  • [转]Java-double类型的小数位数设置

    千次阅读 2021-04-20 21:06:58
    在一些编程过程中,有时会对小数点后个数有要求,比如:最终输出数字保留一位小数,此时有以下几种方案: 方案一:直接输出 示例: public class 位数控制 { public static void main(String[] args) { //保留...
  • 用String类format方法 例如: double x = 1.23456789 System.out.println(String.format("%.6f", x)); //表示四舍五入保留六位小数。 System.out.println(String.format("%.3f", x)); //表示四舍五入保留3位小数 ...
  • Java中用String类型获取Oracle数据库小于1的小数时小数点前的0不显示 今天测试人员在测试项目时发现了一个问题,存储到oracle数据库中的一个小数0.77,在页面上获取时得到了.77,丢失了小数点前的0。 查看了对应的...
  • JAVA的小数

    2019-10-05 06:42:15
    JAVA的小数称为浮点数 1、有两种类型: float:单精度浮点数。4个字节。 double:双精度浮点数。8个字节。 2、类型转换 容量小 -------------------------------> 容量大 byte,short,char << ...
  • 09.java语言基础-小数类型(float-double)

    千次阅读 2017-06-07 15:36:19
    /* 小数类型(float-double)  float,double类型  表示小数类型又称为浮点类型,其中float 表示单精度类型,double表示双精度类型,但是二者都不能表示精度的小数  java的浮点类型常量有两种表示形式  十...
  • 在工作中,我们可能想要指定精度的小数。下面我来介绍几种方法,但是需要注意的是每种方法的返回数据类型,这个参阅java开发文档可以得知,此处不再赘述: 方式一: 代码如下: double f = 111231.5585;...
  • Java中double类型保留两位小数

    千次阅读 2016-08-27 17:39:29
    java中对double类型的小数经常会有小数点后边保留一位小数或者保留两位小数的需求。 javaAPi中提供了一个专门的类BigDecimal,用来对超过16位有效位的数进行精确的运算。 使用步骤: //定义一个double类型的数字 ...
  • java使用何种类型表示精确的小数

    千次阅读 2019-03-21 11:10:00
    java使用何种类型表示精确的小数? 结论 float和double类型的主要设计目标是为了科学计算和工程计算,速度快,存在精度丢失 BigDecimal用来表示任意精确浮点数运算的类,在商业应用环境下,不存在精度丢失 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,514
精华内容 1,405
关键字:

java的小数类型

java 订阅