A. 有关java浮点数精度的问题
1、设置显示格式
%4.1f
2、
定义为float,则会有6位小数
定义为int,则为89
B. java中如何实现N个浮点数相加并确保其精确度
用BigDecimal类来计算,先用加法计算,再用结果除以1,通过devide除法方法来确认保留几位小数,如下例:
importjava.math.*;
publicclassDemo
{
publicstaticvoidmain(String[]args){
BigDecimalbig1=newBigDecimal(123456.23456);
BigDecimalbig2=newBigDecimal(123.456);
BigDecimalbig3=newBigDecimal(1);
BigDecimaltemp=big1.add(big2);
System.out.println(big1.divide(big3,5,BigDecimal.ROUND_HALF_UP));//保留5位小数,返回bigDecimal
}
}
C. .....java中,如何让用户定义浮点数精度
/**
* 提供精确的小数位四舍五入处理。
* @param v 需要四舍五入的数字
* @param scale 小数点后保留几位
* @return 四舍五入后的结果
*/
public static double round(double v, int scale) {
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b = new BigDecimal(Double.toString(v));
BigDecimal one = new BigDecimal("1");
return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
D. JAVA 单精度浮点型数据取值范围
java 代码
double maxd=Double.MAX_VALUE;//最大值
double mixd=Double.MIN_VALUE;//最小值
System.out.println("双精度浮点在"+mixd+"到"+maxd+"之间");
float maxf=Float.MAX_VALUE;//最大值
float mixf=Float.MIN_VALUE;//最小值
System.out.println("单精度浮点在"+mixf+"到"+maxf+"之间");
我只能这样……
输出结果:
双精度浮点在4.9E-324到1.7976931348623157E308之间
单精度浮点在1.4E-45到3.4028235E38之间
nE**貌似是指n乘以10的**次方
E. java中“float型浮点数在机器中占32位,有效精度为6位。”怎么解释
有效精度是这样
比如:
3.14
小数点后面两位
当然六位的话,就是小数点后面六位了
新年快乐
-----------------
不是.6位以后就不显示了
他只会显示到小数点后6位,之后就截掉不显示了哦
F. JAVA中键盘输入双精度浮点数
import java.util.Scanner;
public class TestDouble {
public static void main(String []args){
System.out.println("请输入一个double:");
Scanner in = new Scanner(System.in);
double inNum = in.nextDouble();
System.out.println(inNum);
}
}
G. java中float和double是多少位浮点数
float表示单精度浮点数在机内占4个字节,用32位二进制描述。
double表示双精度浮点数在机内占8个字节,用64位二进制描述。
浮点数在机内用指数型式表示,分解为:数符,尾数,指数符,指数四部分。
数符占1位二进制,表示数的正负。
指数符占1位二进制,表示指数的正负。
尾数表示浮点数有效数字,0.xxxxxxx,但不存开头的0和点
指数存指数的有效数字。
指数占多少位,尾数占多少位,由计算机系统决定。
可能是数符加尾数占24位,指数符加指数占8位 -- float.
数符加尾数占48位,指数符加指数占16位 -- double.
知道了这四部分的占位,按二进制估计大小范围,再换算为十进制,就是浮点数的数值范围。
对编程人员来说,double 和 float 的区别是double精度高,有效数字16位,float精度7位。但double消耗内存是float的两倍,double的运算速度比float慢得多,java语言中数学函数名称double 和 float不同,不要写错,能用单精度时不要用双精度(以省内存,加快运算速度)
H. 关于java的浮点型精度问题
出现这种问题很正常,因为在计算机内部,所有的数据都是用二进制数表示的,像十进制数的0.1,如果转换成二进制数,就会出现精度损失,只有那些1/2^n的数(在n不是很大的时候)才不会产生精度损失
所以输出a不等于2.4是很正常的
I. 请教一下: java语言中,float (单精度浮点型)和 double(双精度浮点型), 到底是
二者的取值范围和精度是不同的
float的精度是6位有效数字,取值范围是10的-38次方到10的38次方,float占用4字节空间
double的精度是15位有效数字,取值范围是10的-308次方到10的308次方,double占用8字节空间