Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有人能解释一下为什么0.6在java中是<;0.6f但0.7is>=0.7f_Java - Fatal编程技术网

有人能解释一下为什么0.6在java中是<;0.6f但0.7is>=0.7f

有人能解释一下为什么0.6在java中是<;0.6f但0.7is>=0.7f,java,Java,谁能用java解释一下为什么 if(0.6 <= 0.6f ) System.out.printf("true"); else System.out.printf("false"); 如果(0.6确定-只需了解0.6、0.6f、0.7和0.7f中没有一个是精确值。它们是适当类型中最接近的可表示近似值。为这4个值存储的精确值为: 0.6f => 0.60000002384185791015625 0.6 => 0.599999999999999977795

谁能用java解释一下为什么

     if(0.6 <= 0.6f ) System.out.printf("true");
     else System.out.printf("false");

如果(0.6确定-只需了解0.6、0.6f、0.7和0.7f中没有一个是精确值。它们是适当类型中最接近的可表示近似值。为这4个值存储的精确值为:

0.6f => 0.60000002384185791015625
0.6  => 0.59999999999999997779553950749686919152736663818359375
0.7f => 0.699999988079071044921875
0.7  => 0.6999999999999999555910790149937383830547332763671875
有了这些信息,你就能明白为什么你会得到你想要的结果

换一种说法,假设您有两种十进制浮点类型,一种是4位精度,另一种是8位精度。现在让我们看看1/3和2/3是如何表示的:

1/3, 4dp => 0.3333
1/3, 8dp => 0.33333333
2/3, 4dp => 0.6667
2/3, 8dp => 0.66666667

因此,在这种情况下,1/3的低精度值比高精度值小,但2/3的情况正好相反。
float
double
的情况是一样的,只是二进制。

当然-只是需要理解,0.6、0.6f、0.7和0.7f都不是这些精确的值。它们是最接近的代表适当类型的可重新呈现近似值。为这4个值存储的精确值为:

0.6f => 0.60000002384185791015625
0.6  => 0.59999999999999997779553950749686919152736663818359375
0.7f => 0.699999988079071044921875
0.7  => 0.6999999999999999555910790149937383830547332763671875
有了这些信息,你就能明白为什么你会得到你想要的结果

换一种说法,假设您有两种十进制浮点类型,一种是4位精度,另一种是8位精度。现在让我们看看1/3和2/3是如何表示的:

1/3, 4dp => 0.3333
1/3, 8dp => 0.33333333
2/3, 4dp => 0.6667
2/3, 8dp => 0.66666667

因此,在这种情况下,1/3的低精度值小于高精度值,但2/3的情况正好相反。
float
double
的情况是一样的,只是二进制。

这是怎么回事代码中的一部分?这与浮点数在Java中的存储方式有关。如果您想要精确的数字,请使用Java.math.BigDecimal类。它是否实际编译?Java中从未见过
是以这种方式使用的。简单的回答是浮点数没有精确表示。如果需要比较浮点数,请使用o相互使用
BigDecimal
@HenryKeiter:浮点数本身是精确表示的——它们不是0.7之类的值的精确表示。它是从0.7到“最接近的
表示”的转换它正在丢失信息。请注意BigDecimal也是一种浮点类型-它只是一个浮点小数点而不是一个浮点二进制点。“是”是什么意思代码中的一部分?这与浮点数在Java中的存储方式有关。如果您想要精确的数字,请使用Java.math.BigDecimal类。它是否实际编译?Java中从未见过
是以这种方式使用的。简单的回答是浮点数没有精确表示。如果需要比较浮点数,请使用o相互使用
BigDecimal
@HenryKeiter:浮点数本身是精确表示的——它们不是0.7之类的值的精确表示。它是从0.7到“最接近的
表示”的转换它正在丢失信息。请注意,BigDecimal也是一种浮点类型-只是它是一个浮点小数点而不是一个浮点二进制点。谢谢。我理解这一点,但我怎么能仅仅通过查看代码就知道结果是什么?@user2410495:你不能通过检查来完成,除非你能够完成他在你的头脑中计算出二进制表示形式是什么。有时最接近的
浮点
会大于最接近的
双精度
,有时会更小。为什么这对你来说很重要?谢谢。我明白这一点,但我怎么能仅仅通过查看代码就知道结果是什么呢?@user2410495:除非你能在头脑中计算出二进制表示形式,否则你不能仅仅通过检查来完成。有时最接近的
浮点值将大于最接近的
双精度
,有时则更小。这对你来说为什么重要?