繁体   English   中英

从 0.0007 中提取有效数字

[英]Extract significant digit from 0.0007

我想从XX=0.0007提取 7 的有效数字

代码如下

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

但是XX变成了6而不是7 谁能帮我?

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

浮点数通常以常见的IEEE-754 格式存储为 2 的幂。就像整数(例如 175)存储为二进制值递增的位之和(165 = 128 + 32 + 4 + 1),分数存储为 1/2 的幂数之和。 这意味着 1/2、1/4 和 1/65536 的值可以精确存储(及其总和,例如 3/4),但您的0.0007不能 它最接近的值实际上是 0.0000699999999999999992887633748495。 (在这个意义上“最近”,在结尾处增加只是多一个单位将使它比0.0007稍大,所不同的是以往任何时候都那么比这个低一个稍微大一些。)

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM