Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.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
Python 从0.0007中提取有效数字_Python_Digits - Fatal编程技术网

Python 从0.0007中提取有效数字

Python 从0.0007中提取有效数字,python,digits,Python,Digits,我想从XX=0.0007 代码如下 XX=0.0007 enX1=XX//10**np.floor(np.log10(XX)); 但是XX变成6而不是7。有人能帮我吗?从某种意义上说,您很幸运地从值0.0007开始。事实证明,该值是无法以浮点格式精确表示的(许多!)十进制值之一 浮点数通常以2的幂形式存储在公共空间中。就像像175这样的整数被存储为两个值(165=128+32+4+1)幂递增的位和一样,分数被存储为两个数幂的1/1之和。这意味着可以准确地存储1/2、1/4和1/65536的值(

我想从
XX=0.0007

代码如下

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

但是
XX
变成
6
而不是
7
。有人能帮我吗?

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

浮点数通常以2的幂形式存储在公共空间中。就像像175这样的整数被存储为两个值(165=128+32+4+1)幂递增的位和一样,分数被存储为两个数幂的1/1之和。这意味着可以准确地存储1/2、1/4和1/65536的值(以及它们的总和,例如3/4),但您的
0.0007
不能。其最接近的值实际上是0.0000699999999992887633748495。(“最接近”的意思是,在末尾再加一个位会使其略大于0.0007,并且差值比这个较低的稍大。)

在计算中,使用双除法斜杠
/
,它指示Python进行整数除法并丢弃小数部分。因此,虽然中间的计算是正确的,您会得到类似于
6.99999…
,但它会被截断,最终得到
6

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

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

如果要得到最接近的整数结果,请使用一个除法斜杠进行精确计算,然后使用
舍入
强制数字为最接近的整数


a准确地说,大约是0.000400000000000000019168694409544。在您的例程之后,Python会将其显示为
4
,但在内部它仍然略大于该值。

如果
xx=0.00054
不使用双斜杠该怎么办@김민재: 如果这回答了你的问题,考虑接受它。请看下面的例子。