我应该如何将Double值与Long.MAX_VALUE进行比较?和Long.MAX_VALUE + 1d [英] how should I compare Double value with Long.MAX_VALUE? and 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屋!