java的-0和0_java – 将“0.1”与.1进行比较

要测试String是否表示double值,您可以执行以下操作:

private static boolean isADouble(String s) {

return new BigDecimal(s).equals(new BigDecimal(Double.parseDouble(s)));

}

public static void main(String[] args) {

System.out.println(isADouble("0.1")); // false

System.out.println(isADouble("0.5")); // true

}

这是有效的,因为新的BigDecimal生成的BigDecimal与String表示的值完全相等,而新的BigDecimal(Double.parseDouble(s))是与该值最接近的两倍的精确值.

我将在最后解释为什么number.compareTo(new BigDecimal(Double.toString(d)))== 0不起作用.

当你这样做

double d = 0.1;

System.out.println(d);

得到答案0.1因为d是与“真实”0.1最接近的两倍. (双d = 0.1;表示“使d最接近的两倍”为0.1.当你写的时候

System.out.println(d + d + d + d + d + d + d + d + d + d);

你看到0.9999999999999999而不是1.你没有看到1的原因是因为有一个双重值比答案更接近于一个(实际上一个是双重值本身).没有理由为什么答案应该是最接近的一对一,因为d首先不是真的0.1(它只是接近它),并且在任何情况下当你添加浮点数时都会引入不准确性.

最后,number.compareTo(new BigDecimal(Double.toString(d)))== 0不起作用,因为即使number.doubleValue()不完全是0.1,Double.toString()仍将其转换为字符串“0.1”因为没有双重值接近“真实”0.1.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值