关于float的疑惑
来源:2-5 编程练习
追着光奔跑
2020-11-25 23:40:00
# 具体遇到的问题
老师好,在书写本章代码时,由于好奇将变量类型定义为float,测试如下代码,其中有三点疑问
# 报错信息的截图# 相关课程内容截图
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回答
同学你好,
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.代码如下:
追着光奔跑
提问者
2020-11-25
关于第一个问题已经解决 我反复测试发现第一次运算时是将最后一位0没有显示出来引起,数字修改为cs=1.1234568199f;即可正常显示;也就是float是有8位指数位,而不是包含符号位8位
相似问题