关于float的疑惑

来源:2-5 编程练习

追着光奔跑

2020-11-25 23:40:00

# 具体遇到的问题
老师好,在书写本章代码时,由于好奇将变量类型定义为float,测试如下代码,其中有三点疑问
# 报错信息的截图
http://img.mukewang.com/climg/5fbe7722096ff4d303930215.jpg# 相关课程内容截图
1.float类型是一个字节存放数据,不管整数位是1 还是11都是保留了6位小数,第三次计算结果为什么不是11.12346

2.整数转float或者double类型都是默认只带一位小数位么,如果想转换为4位小数该怎么操作

3.小数位超出数据类型范围,自动四舍五入是java的默认规则么,如果想像 11/2自动截断为5而不是6,该怎么操作

# 尝试过的解决思路和结果

# 粘贴全部相关代码,切记添加代码注释(请勿截图)

public class MathDemo {

    public static void main(String[] args) {

//将变量m的初值赋值为10,变量n的初值赋值为5

    

   int m=10,n=5;

    //变量m的值加3,n的值加5

    

    m+=3;

    n+=5;

    //求m和n的平均值,并将结果存于变量p中

    double p =(m+n)/2;

    System.out.println("m和n的平均值为:"+p);

   

    //求m的平方乘以n的平方,并将结果存于变量q中

    float q =(m*m)*(n*n);

    System.out.println("m的平方乘以n的平方为:"+q);

    //将p和q的值打印输出

    //测试部分代码

    float cs;

    cs=11f;

    System.out.println("float赋值整数结果"+cs);

    cs=1.123456899f;

    System.out.println("float赋值10位小数结果"+cs);

    cs=11.123456899f;

    System.out.println("float赋值10位小数结果"+cs);


}

}


写回答

2回答

好帮手慕小脸

2020-11-26

同学你好,

1、解决问题就好,棒棒的~继续加油!

2、是的,只能携带一位小数,但可以限制double类型保留多少小数位

使用BigDecimal保留小数,通过 setScale方法设置保留几位小数以及保留规则
double a = 4.666666666;
BigDecimal bigDecimal = new BigDecimal(a);
/**
* param1: 要保留几位小数
* param2:四舍五入模式
*/
double a2 = bigDecimal.setScale(4, RoundingMode.HALF_UP).doubleValue();
System.out.println(a2); // 打印结果为4.6667


3、可以定义int类型的变量i来接收11/5,就可以得到结果5.代码如下:

http://img.mukewang.com/climg/5fbf18c509eb845205240216.jpg


0

追着光奔跑

提问者

2020-11-25

关于第一个问题已经解决 我反复测试发现第一次运算时是将最后一位0没有显示出来引起,数字修改为cs=1.1234568199f;即可正常显示;也就是float是有8位指数位,而不是包含符号位8位

0

0 学习 · 16556 问题

查看课程