xdrn.net
当前位置:首页 >> JAvA中FloAt类型自动转DouBlE类型会有误差 >>

JAvA中FloAt类型自动转DouBlE类型会有误差

float和double只是位数不一样,对浮点数的表示方式都是一样的.float会损失精确,doube必然也会损失精度.补充:java 的浮点类型都依据 IEEE 754 标准.IEEE 754 定义了32 位和 64 位双精度两种浮点二进制小数标准.IEEE 754 用科学记数

float 类型 精度只有7位有效数字double 类型 精度12-14位有效数字s=k/j; 会引进有效数字的截断误差.double 型,输出格式用 %lf (Long Float -- lf)

由于对float或double 的使用不当,可能会出现精度丢失的问题.问题大概情况可以通过如下代码理解:public class FloatDoubleTest { public static void main(String[] args) { float f = 20014999; double d = f; double d2 = 20014999; System.out.println(

关于double和float的精度问题,在进行数值运算时,如果有float或者double类型的浮点数参与计算时,偶尔会出现结果不准确的情况.浮点数在计算机中是无法进行准确表示的,比如0.1在计算机中只是一个近似值,因此对浮点数运算结果具有不可预见性.如果两个浮点操作数的误差就能相互抵消,计算结果就能正确.,比如0.3+0.4.所以一个有误差,一个没误差.参考:http://www.csdn123.com/html/blogs/20130818/55035.htm

在大多数情况下,使用double和float计算的结果是准确的,但是在一些精度要求很高的系统中,这种问题是非常严重的.在《Effective Java》中提到一个原则,那就是float和double只能用来作科学计算或者是工程计算,但在商业计算中我们要用

double 有效数字14位,float型有效数字7位,所以double精度高. double 占内存 8 字节,,float占内存 4 字节,float 省内存,运算速度快. 输入/输出格式 double 用 %lf, float 用 %f

理论上不会影响精度.float的最大正有限值为:0x7f7fffff而byte为1字节的int,转型不会影响精度.

/** * 将毫转元保留小数点后两位 */ public static String toPriceYuanByhao(Long priceHao){ final int MULTIPLIER = 10000; String amountYuan = BigDecimal.valueOf(priceHao).divide(BigDecimal.valueOf(MULTIPLIER),2,BigDecimal.ROUND_HALF_UP).toString(); return amountYuan; }

二者的取值范围和精度是不同的float的精度是6位有效数字,取值范围是10的-38次方到10的38次方,float占用4字节空间double的精度是15位有效数字,取值范围是10的-308次方到10的308次方,double占用8字节空间

很好解释啊因为计算机都是以2进制数计算的 10.6转成2进制无法转尽(就是不能正好)于是计算机精确到多少位(与计算机有关) 就有了误差而10.5 可以转尽 是 1010.1000 不用近似 所以正好

网站首页 | 网站地图
All rights reserved Powered by www.xdrn.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com