在Java中,双类型变量的赋值值和该变量的打印输出值是否不同



如果我给一个变量赋值,double等于一个数字。我的理解是,使用1和0实际表示/存储的数字可能与我刚刚分配的数字不完全相同。那么,有没有可能我给一个双变量赋值,然后我打印出这个变量,打印出的数字与自由值不同???

我试用了System.out.println(123456789.123456789);结果为1.23345678912345679E8。没有区别。

因此,以下是关于浮点运算在Java中如何工作的一些规则:

  • 在程序中编写浮点文字时,Java编译器会将该值解析为doubleDouble.parseDouble(String)
  • Double.parseDouble(Double.toString(x))等于x,但NaN除外,这很奇怪
  • Double.toString(Double.parseDouble(string))可能不同于string,因为double的精度有限。例如,Double.toString(Double.parseDouble("3.141592653589793238462"))将返回3.141592653589793。(因此,System.out.println(3.141592653589793238462)将打印出3.141592653589793。)
  • 存储在double中的精确数字既不是这两个数字。由于CCD_ 13被存储为二进制分数(如1/2+1/8+1/16+…)。。。,double不能像0.1那样准确地存储十进制数,因为0.1不能准确地表示为2的幂和。要获得存储在double中的确切值,可以执行new BigDecimal(double).toString()。例如,new BigDecimal(0.1).toString()返回"0.1000000000000000055511151231257827021181583404541015625",这是可在double中表示的0.1的最佳近似
  • Double.toString(x)打印出的数字是具有最少数字的十进制数字Y,使得x是最接近Y的数字,其可表示为double。这就是为什么即使0.1被表示为0.1000000000000000055511151231257827021181583404541015625Double.toString也只返回"0.1"
  • 如果要存储精确的值0.1或精确的十进制值,基本上必须将String转换为BigDecimal,如new BigDecimal("0.1")中所示。一旦有一个数字作为double,就不能再相信它会存储精确的十进制值

最新更新