java控制float和double的精度

在做读取Excel表格数据时,碰到有小数点的数字,用double和float来求和时会多出好多位小数,看起来总觉得怪怪的,怎样控制它的长度呢?

DecimalFormat df = new DecimalFormat("########.0");

//四舍五入

value = Double.parseDouble(df.format(value));

我这里是控制一位小数,如果要求两位,就写成########.00

java控制float和double的精度,布布扣,bubuko.com

时间: 2024-10-19 10:02:05

java控制float和double的精度的相关文章

精确计算java中float和double的精度

[本文相关的代码放在github上,地址为:https://github.com/VigourJiang/StructuredFloat] Java中double类型的格式是遵循IEEE 754标准的.尽管数学意义上的小数是连续的,但double仅仅能表示其中的一些离散点,把这些离散点组成的集合记为S,S的大小还是有限的.如果要保存的小数P刚好在集合S内,那么double类型就能精确的表示P:否则double类型只能从集合S中找一个与P最近的离散点P'代替P. 以上表述对于float也成立.IE

Java浮点数float和double精确计算的精度误差问题总结

1.float整数计算误差 案例:会员积分字段采用float类型,导致计算会员积分时,7位整数的数据计算结果出现误差. 原因:超出float精度范围,无法精确计算. float和double的精度是由尾数的位数来决定的.浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响. float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字: double:2^5

Java 浮点数 float或double类型的表示范围和精度

隐约记得,浮点数判断大小好像有陷阱,因为底层的二进制数不能精确表示所有的小数.有时候会产生让人觉得莫名其妙的事情. 如在java中, 0.99999999f==1f //true 0.9f==1f //false 要明白这些,首先要搞清楚float和double在内存结构 1.内存结构 float和double的范围是由指数的位数来决定的. float的指数位有8位,而double的指数位有11位,分布如下: float: 1bit(符号位) 8bits(指数位) 23bits(尾数位) dou

float、double的精度、范围,在内存中的存储方式

float.double的精度,在内存中的存储方式 ? 一.浮点型变量在内存中的存储方式 Java的浮点数遵循IEEE 754标准,采用二进制数据的科学计数法来表示浮点数,float遵从的是IEEE R32.24 ,而double 遵从的是R64.53.该标准中表示的浮点数表示分为规约形式和非规约形式以及特殊情况. ??? 无论是单精度还是双精度在存储中都分为三个部分: 符号位(Sign) : 0代表正,1代表为负 指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储 尾

Java中float和double转换的问题

为什么double转float不会出现数据误差,而float转double却误差如此之大?   double d = 3.14; float f = (float)d; System.out.println(f); 输出结果是:3.14; float f = 127.1f; double d = f; System.out.println(d); 输出结果是:127.0999984741211 为什么结果会是这样呢? 如何避免这样的问题发生,让float转double能得到实际的数据? 解决办法

JAVA中float与double的区

float是单精度类型,精度是8位有效数字,取值范围是10的-38次方到10的38次方,float占用4个字节的存储空间 double是双精度类型,精度是17位有效数字,取值范围是10的-308次方到10的308次方,double占用8个字节的存储空间 当你不声明的时候,默认小数都用double来表示,所以如果要用float的话,则应该在其后加上f 例如:float a=1.3; 则会提示不能将double转化成float  这成为窄型转化 如果要用float来修饰的话,则应该使用float a

关于float、double结果精度的问题

一个例子: int a2 = 7; int b2 = 26; float result2 = b2 / a2; // 结果是 3.0 结果确是3.0,而不是期待的结果:3.71.这是因为等号右边的两个变量都是整数int,得到的结果也类似与整数. 修改如下: int a2 = 7; int b2 = 26; float result2 = (float)b2 / a2; // 结果是 3.71,与期待结果一致. 此外,double类型,同float一样,存在相同的问题.

【转】JAVA程序中Float和Double精度丢失问题

原文网址:http://blog.sina.com.cn/s/blog_827d041701017ctm.html 问题提出:12.0f-11.9f=0.10000038,"减不尽"为什么? 来自MSDN的解释: http://msdn.microsoft.com/zh-cn/c151dt3s.aspx 为何浮点数可能丢失精度浮点十进制值通常没有完全相同的二进制表示形式. 这是 CPU 所采用的浮点数据表示形式的副作用.为此,可能会经历一些精度丢失,并且一些浮点运算可能会产生意外的结果

float,double等精度丢失问题 float,double内存表示

问题提出:12.0f-11.9f=0.10000038,"减不尽"为什么? 来自MSDN的解释: http://msdn.microsoft.com/zh-cn/c151dt3s.aspx 为何浮点数可能丢失精度浮点十进制值通常没有完全相同的二进制表示形式. 这是 CPU 所采用的浮点数据表示形式的副作用. 为此,可能会经历一些精度丢失,并且一些浮点运算可能会产生意外的结果. 导致此行为的原因是下面之一: 十进制数的二进制表示形式可能不精确. 使用的数字之间类型不匹配(例如,混合使用浮