从double转换为float,精度丢失问题?
package com.xc.util.datecheck;public class Test2 {public static void main(String[] args) {
double s = 22.456789;
System.out.println("##"+Float.parseFloat(String.valueOf(s)));
}}
这个输出是##22.456789 精度没丢失~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~package com.xc.util.datecheck;public class Test2 {public static void main(String[] args) {
double s = 22.234567;
System.out.println("##"+Float.parseFloat(String.valueOf(s)));
}}这个输出是##22.234568 精度丢失请问第一个例子精度没丢失,为什么第二个例子精度丢失了?
package com.xc.util.datecheck;public class Test2 {public static void main(String[] args) {
double s = 22.456789;
System.out.println("##"+Float.parseFloat(String.valueOf(s)));
}}
这个输出是##22.456789 精度没丢失~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~package com.xc.util.datecheck;public class Test2 {public static void main(String[] args) {
double s = 22.234567;
System.out.println("##"+Float.parseFloat(String.valueOf(s)));
}}这个输出是##22.234568 精度丢失请问第一个例子精度没丢失,为什么第二个例子精度丢失了?
float 单精度16位的浮点数
所以double在强制转换成float时会丢失精度
http://www.cnblogs.com/jillzhang/archive/2007/06/24/793901.html
这确实是个好贴。。
(2)double s = 22.234567; 随机定义了两个数,为什么结果会这样呢?
解析:浮点数是不连续的,这个要“碰运气”了!呵呵呵.........