java编码中注意问题的总结

1. java中的浮点数比较事项

 1.1 若精度要求不高,比如因为传感器有误差,小于0.001的数都可以认为等于0,那么就定义epsilon = 0.001:

1 private final double epsilon = 1e-9; 
2 double double_x = 0.0;
3 if(Math.abs(double_x - 0) < epsilon) 
4 {
5     System.out.println("true");
6 }

1.2 转换成字符串之后用equals方法比较 

 1 Double.toString(double_x).equals(Double.toString(double_y)) 

注意:这种方法只适用于比较精度相同的数据,并且是只用用于比较是否相等的情况下,不能用来判断大小。

1.3 转换成Long之后用==方法比较

Sun提供了一种将Double类型转换成Longo类型的方法,即Double.doubleToLongBits()方法,从而可以使double按照long的方法(<, >, ==)判断是否大小和是否相等。

1 Double.doubleToLongBits(0.01) == Double.doubleToLongBits(0.01;
2 Double.doubleToLongBits(0.02) > Double.doubleToLongBits(0.01);
3 Double.doubleToLongBits(0.02) < Double.doubleToLongBits(0.01) ;

1.4 使用BigDecimal类型的equals方法或compareTo方法

使用字符串形式的float型和double型构造BigDecimal:BigDecimal(String val)。BigDecimal的euquals方法是先判断要比较的数据类型,如果对象类型一致前提下同时判断精确度(scale)和值是否一致;compareTo方法则不会比较精确度,把精确度低的那个对象转换为高精确度,只比较数值的大小。

复制代码
 1 import java.math.BigDecimal;
 2 
 3 System.out.println(new BigDecimal("1.2").equals(new BigDecimal("1.20")));  //输出false  
 4 System.out.println(new BigDecimal("1.2").compareTo(new BigDecimal("1.20")) == 0); //输出true  
 5                       
 6 System.out.println(new BigDecimal(1.2).equals(new BigDecimal("1.20"))); //输出false
 7 System.out.println(new BigDecimal(1.2).compareTo(new BigDecimal("1.20")) == 0); //输出false  
 8                  
 9 System.out.println(new BigDecimal(1.2).equals(new BigDecimal(1.20))); //输出true  
10 System.out.println(new BigDecimal(1.2).compareTo(new BigDecimal(1.20)) == 0);//输出true 
复制代码

2. 判断一个整数是否为奇数,用x%2 !=0,而非x%2 ==1,因为x可能为负数

3. 用char的值作为数组下标(例如统计字符串中每个字符出现的次数),因为考虑char可能是负数的问题,正确的做法应该是,先将其强制转换为unsigned char,再用作下标

 

posted @   屠城校尉杜  阅读(290)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示