怎么判断参数为两精度的零(面试题)

今天有朋友在网上问我.给我发了一题.如下:

1//判断一个双精度数字是否为0,这个方法正确吗
2    public static boolean isZero(double i){
3        return i == 0;
4    }
 
5  


我觉得这个题还真有意思.在基本数据类型中.任何基本数值型都可以为自动转换成double型.
既然他的参数定义成了double型.那么,参数i不管怎么样,最后还是double型.你可以改变方法中的任何业务逻辑.都不能给出正确的判断.

开始.我也被这个方法定义给误导了.怎么写业务逻辑.就是不能判断出来.还真不好办!
其实 下面这个方法可以判断:
1public static boolean isZero(Serializable d){
2        String dstr = String.valueOf(d);
3        if(dstr.indexOf(".")>0){
4            return true;
5        }
else{
6            return false;
7        }

8    }
 
9  
不知道还有没有更好的办法判断!

从上面这个例子.我们可以看出设计的重要性. 如果你设计出了什么问题.那么你还真的实现不了.

posted on 2008-03-09 17:18 DoubleJ 阅读(1018) 评论(9)  编辑  收藏

评论

# re: 怎么判断参数为两精度的零(面试题)[未登录] 2008-03-09 18:33 test

这个貌似是有问题的,判断一个双精度数字是否是0,最好是用范围来判断,不要直接和0进行比较。  回复  更多评论   

# re: 怎么判断参数为两精度的零(面试题) 2008-03-09 18:35 DoubleJ

大家可以提供一下自己的解决方案或代码!  回复  更多评论   

# re: 怎么判断参数为两精度的零(面试题) 2008-03-09 19:48 差沙

真正的代码编写中遇到要求精确判断是否为0的业务时,肯定要使用BigDecimal的。  回复  更多评论   

# re: 怎么判断参数为两精度的零(面试题)[未登录] 2008-03-09 22:04 Doublej

楼上的. 怎么实现. 贴个代码~!  回复  更多评论   

# re: 怎么判断参数为两精度的零(面试题) 2008-03-10 21:20 KF.咖啡

((new BigDecimal(Double.toString(i))).compareTo(BigDecimal.ZERO))==0

  回复  更多评论   

# re: 怎么判断参数为两精度的零(面试题)[未登录] 2008-03-11 16:29 flustar

看看这么写可行?
public static boolean isZero(double d) {
Double db=new Double(d);
if(db.toString().equals("0.0")){
System.out.println("参数为0");
return true;
}else{
System.out.println("参数不为0");
return false;
}
}  回复  更多评论   

# re: 怎么判断参数为两精度的零(面试题)[未登录] 2008-03-11 22:11 doublej

楼上的你测试了没?   回复  更多评论   

# re: 怎么判断参数为两精度的零(面试题) 2008-03-12 06:12 李敏

不知道我的理解是不是对的!

import java.io.Serializable;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class Test {

public static void main(String[] args) {
System.out.println(isZero("110.0"));
}

public static boolean isZero(String number) {
int index=number.indexOf(".");

if (index > 0&&index!=(number.length()-1)) {
//严格来说这里还必须进一步进行验证该字符串是否为数字
//可以把字符串中的“.”替换掉,然后对该字符串进行分析来确认该字符串只包含数字(可以使用正则表达式)
Double doubleNumber = new Double(number);
double srcNumber = doubleNumber.doubleValue();
if (srcNumber == 0) {
System.out.println("The double number is Zero!");
return true;
} else {
System.out.println("The double number is not Zero!");
return false;
}
} else {
System.out.println("The value is not double number!");
return false;
}

}
}
  回复  更多评论   

# re: 怎么判断参数为两精度的零(面试题)[未登录] 2008-03-12 08:35 Doublej

其实我们都搞错了.
今天看题目突然发现.他给你的就是一个double型的数据类型.
所以, 我觉得本来给出的方法应该就是对的.!
哎. 文字游戏  回复  更多评论   


标题  
姓名  
主页
验证码 *  
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-03-09 17:41 编辑过
 
 

相关链接:
网站导航:



<2008年3月>
2425262728291
2345678
9101112131415
16171819202122
23242526272829
303112345

导航

统计

常用链接

留言簿

随笔分类

随笔档案

文章档案

搜索

最新评论

阅读排行榜

评论排行榜