java float问题

代码

public static void main(String[] args) {

int a = (int) ((1000.0 * 60 + 2000.0) * 1.4f);

System.out.println(a);

}

输出   86799

然后这样的话

public static void main(String[] args) {

int a = (int) ((1000.0 * 60 + 2000.0) * 1.4);

System.out.println(a);

}

输出    86800

86800才是正确的,float丢精度了不能乱用啊!!!!!

时间: 2024-08-16 04:40:59

java float问题的相关文章

Java float保留两位小数或多位小数

转自:Java float保留两位小数或多位小数 方法1:用Math.round计算,这里返回的数字格式的. float price=89.89; int itemNum=3; float totalPrice=price*itemNum; float num=(float)(Math.round(totalPrice*100)/100);//如果要求精确4位就*10000然后/10000 方法2:用DecimalFormat 返回的是String格式的.该类对十进制进行全面的封装.像%号,千分

[Java基础] Java float保留两位小数或多位小数

方法1:用Math.round计算,这里返回的数字格式的. float price=89.89; int itemNum=3; float totalPrice=price*itemNum; float num=(float)(Math.round(totalPrice*100)/100);//如果要求精确4位就*10000然后/10000 方法2:用DecimalFormat 返回的是String格式的.该类对十进制进行全面的封装.像%号,千分位,小数精度.科学计算. float price=

Java Float类型 减法运算时精度丢失问题

package test1; public class Test2 { /*** @param args*/public static void main(String[] args) {   Float xx = 2.0f;   Float yy = 1.8f;   Float tt = xx - yy;   System.out.println("tttttt-----" + tt); } } 果然输出结果是: tttttt-----0.20000005 再测试了几个float类型

解决java float double 浮点型参与计算失精度

本人前段时间做一个社区电商应用,发现了一个 天坑   ...................让我哭会 . 下面听听我的踩坑之路吧 ,电商肯定跟¥打交道了,计算少不了的.由于本人太菜 单纯的以为  float  double 可以直接参与加减乘除 感觉这种代码万无一失没去想这么多直接 float*int . 之前简单测试没问题,项目上线后自己偶然才发现的(不知道公司测试干嘛的) ,当选择多件商品时 , 还是直接说现象吧 比如 在代码中    0.1 f  * A         A为int 型  

java float double精度为什么会丢失?浅谈java的浮点数精度问题 【转】

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

JAVA float double数据类型保留2位小数点5种方法

/** * Java 两个整数相除保留两位小数,将小数转化为百分数 * java中,当两个整数相除时,由于小数点以后的数字会被截断,运算结果将为整数,此时若希望得到运算结果为浮点数,必须将两整数其一或是两者都强制转换为浮点数. 例如: (float)a/b // 将整数其中一个强制转换为浮点数,再与另一个整数相除 a/(float)b (float)a/(float)b // 将两个整数同时强制转换为浮点数后再相除 */ ///////计算小数点的位数: System.out.println("

java Float和Double 之间的相互转型问题

由于float 是单精度浮点小数,而double 是双精度浮点小数 单精度型能精确到七位,而双精度能精确到15位.用户在选用这些数据类型时,要注意变量所取值的范围.并且数值为整数时,为了运算速度,不用把变量硬定义为浮点型. 如果要将Float和Double之间相互转型,java 提供了一下方法Float.doubleValue()和Double.floatValue() 查看JDK1.6中对其方法进行这样解释 Float.doubleValue() public double doubleVal

java float浮点型数据存储,丢失精度问题

java中float类型为4字节32位,内存中的存储遵循IEEE-754格式标准: 一个浮点数有2部分组成:底数m和指数e底数m部分:使用二进制数来表示此浮点数的实际值.指数e部分:占用8bit(1个字节)的二进制数,可表示数值范围为0-255.但是指数可正可负,所以,IEEE规定,此处算出的次方必须减去127才是真正的指数.所以,float类型的指数可从-126到128.底数部分实际是占用24bit(3个字节)的一个值,但是最高位始终为1,所以,最高位省去不存储,在存储中占23bit. 所以一

java float跟double类型区别

单精度和双精度的取值范围和精度是不同的 单精度:float的精度是6位有效数字,取值范围是10的-38次方到10的38次方,float占用4字节空间 双精度:double的精度是15位有效数字,取值范围是10的-308次方到10的308次方,double占用8字节空间. 原文地址:https://www.cnblogs.com/mileSs/p/8386968.html