从0.0007中提取有效数字



我想从XX=0.0007中提取有效位数7

代码如下

XX=0.0007
enX1=XX//10**np.floor(np.log10(XX));

但是CCD_ 2变为CCD_ 3而不是CCD_。有人能帮我吗?

从某种意义上说,您很幸运从值0.0007开始。事实证明,该值是(许多!(个十进制值之一,不能以浮点格式精确地表示

浮点数通常以通用IEEE-754格式存储为2的幂。就像175这样的整数被存储为具有两个值(165=128+32+4+1(的递增幂的比特的和一样,分数被存储为两个数字的1/幂的和。这意味着1/2、1/4和1/65536的值可以精确存储(以及它们的总和,如3/4(,但0.0007可以而不是。其最接近的值实际上是0.000069999999999992887633748495。("最接近"的意思是,只在末尾多加一个比特,就会使其比0.0007稍大,并且差异比这个较低的比特稍大。(

在计算中,使用双除法斜线//,它指示Python进行整数除法,并丢弃小数部分。所以,虽然中间计算是正确的,你得到了类似6.99999...的东西,但它会被截断,最终得到6

如果使用单个斜杠,结果将保留其(精确!(小数,但Python将表示为7.0000,给或取几个零。默认情况下,Python只显示少量小数。

请注意,这仍然"不是"7的确切值。计算从一个不精确的数字开始,尽管可能会有一些中间舍入,但最终得到精确整数的可能性很小。同样,不是针对所有小数,而是针对大量小数。其他分数值的存储可能比您输入的值(0.0004(大,例如a,但也存在潜在的准确性"问题"。它只是不像你的那样显眼。

如果您想要一个最接近的整数结果,请使用单斜杠进行精确计算,然后再加上round,以强制数字接近整数。

a准确地说,大约是0.0004000000000000000019168694409544。在您的例程之后,Python将显示4,但在内部它仍然比它大一点。

最新更新