我应该如何将Double值与Long.MAX_VALUE进行比较?和Long.MAX_VALUE + 1d [英] how should I compare Double value with Long.MAX_VALUE? and Long.MAX_VALUE+1d

查看:68
本文介绍了我应该如何将Double值与Long.MAX_VALUE进行比较?和Long.MAX_VALUE + 1d的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要比较两个double值,如下所示:

I want to compare two double value as follow:

Double doubleValue = Double.valueOf(Long.MAX_VALUE);

Double doubleValue2 = Double.valueOf(Long.MAX_VALUE + 1d);

显然doubleValue和doubleValu2不相等,由于1d加法,第二个较大.

Apparently doubleValue and doubleValu2 are not equal, 2nd is larger due to the 1d addition.

但是无论我使用compare()还是equals()方法,这两个方法对于两个值都返回相等的结果.我有什么办法可以比较而又不会失去准确性.

but no matter I use compare() or equals() method, both methods return a equal result for two values. Is there any way I can compare and not losing accuracy here.

提前谢谢.

推荐答案

这是因为在将长整型转换为双精度时会丢失精度

This is because of the loss of precision while converting long to double

    double d1 = (double)Long.MAX_VALUE;
    double d2 = Long.MAX_VALUE + 1.0;
    System.out.println(d1);
    System.out.println(d2);

给出相同的数字

9.223372036854776E18
9.223372036854776E18

long有32位,而double的有效位有53位 http://en.wikipedia.org/wiki/Double-precision_floating-point_format .以十进制表示,最大长度= 922337203685477575807,它是19位数字,而double最多可以容纳17个

long has 32 bits and double's significand has 53 bits http://en.wikipedia.org/wiki/Double-precision_floating-point_format. In decimal terms, max long = 9223372036854775807, it is 19 digits, and double can hold 17 max

这篇关于我应该如何将Double值与Long.MAX_VALUE进行比较?和Long.MAX_VALUE + 1d的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆