Float 比较

本文探讨了在Java中如何正确地比较浮点数和字符串。对于浮点数,由于精度损失,直接使用==进行比较可能导致错误结果。推荐使用Float类的compareTo方法来进行数值比较。而对于字符串,使用equals方法来判断内容的一致性更为准确。

浮点数的表示是不精确的,不能直接比较两个数是否完全相等,不可将浮点变量用“==”或“!=”与任何数字比较。

Float a = 16.5f;

Float b = 16.5f;
String c = "1";

String d = "1";


System.out.println("a == b:" + (a == b));
System.out.println("a.equals(b):" + a.equals(b));
System.out.println("a.compareTo(b):" + a.compareTo(b));

System.out.println("c == d:" + (c == d));

System.out.println("c.equals(d):" + c.equals(d));


结果为:

a == b:false
a.equals(b):true
a.compareTo(b):0
c == d:true
c.equals(d):true

所以,比较两个Float的值 可以用comparetTo(), 返回值 0 (表示相等),1(表示大于) 和 -1(表示小于) 


Java中,比较float类型数值有多种方法: - **使用`Float.compareTo()`方法**:`java.lang.Float.compareTo()`方法可用于比较两个`Float`对象。若新的float值在数值上等于此`Float`,该方法返回值0;若此`Float`在数值上小于新的float,则返回小于0的值;若此`Float`在数值上大于新的float,则返回大于0的值。示例代码如下: ```java public class tst { private float a = 3.0f; private float b = 0.0f; private float c = 4.0f; private float d = 0.0f; public void floatCompare() { System.out.println("a>b:" + new Float(a).compareTo(new Float(b))); System.out.println("a<c:" + new Float(a).compareTo(new Float(c))); System.out.println("b=d:" + new Float(b).compareTo(new Float(d))); } public static void main(String args[]) { new tst().floatCompare(); } } ``` - **使用比较运算符(`==`、`>`、`<`等)**:可以直接使用`==`、`>`、`<`等运算符进行比较运算。但由于浮点数在计算机中存储存在精度问题,可能会导致结果不符合预期。示例代码如下: ```java public class FloatComparison { public static void main(String[] args) { computer(2.00023434239f, 2.00023434233f); System.out.println("--------------------------------"); computer(2.00023f, 2.00022f); } public static void computer(float f1, float f2) { System.out.println("使用==比较结果:" + (f1 == f2)); System.out.println("使用Math.abs() > 0比较:" + (Math.abs(f1 - f2) > 0)); System.out.println("使用Math.abs() < 0比较:" + (Math.abs(f1 - f2) < 0)); System.out.println("使用Math.abs() = 0比较:" + (Math.abs(f1 - f2) == 0)); System.out.println("使用>比较:" + (f1 > f2)); System.out.println("使用<比较:" + (f1 < f2)); } } ``` - **使用`BigDecimal`类**:`BigDecimal`类可以处理高精度的十进制数,避免浮点数精度问题。该类提供了很多方法用于对其值进行数字操作,且其对象是不可变的。不过使用`BigDecimal`处理浮点数时,要注意使用字符串构造函数,避免浮点数精度问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值