Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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 打印浮动在科学记数法中,无需额外精度_Python - Fatal编程技术网

Python 打印浮动在科学记数法中,无需额外精度

Python 打印浮动在科学记数法中,无需额外精度,python,Python,我需要一些科学记数法中的浮点字符串,如['5e-6','1e-5','1.5e-5','2e-5','2.5e-5',…] 所以我尝试用[str(n*1e-6)为列表中的n(范围(5,60,5))]生成它们,但它给出['4.99999999999999996e-06','9.9999999999999999e-06','1.499999999999999e-05',…] 然后我尝试用[“{.1e}”.format(n*1e-6)对列表中的n(范围(5,60,5))]进行格式化,它给出了['5.0

我需要一些科学记数法中的浮点字符串,如
['5e-6','1e-5','1.5e-5','2e-5','2.5e-5',…]

所以我尝试用
[str(n*1e-6)为列表中的n(范围(5,60,5))]生成它们
,但它给出
['4.99999999999999996e-06','9.9999999999999999e-06','1.499999999999999e-05',…]

然后我尝试用
[“{.1e}”.format(n*1e-6)对列表中的n(范围(5,60,5))]
进行格式化,它给出了
['5.0e-06','1.0e-05','1.5e-05','2.0e-05','2.5e-05',…]这些仍然不是我想要的


我想知道除了编写自定义函数,还有什么简单的方法可以做到这一点?谢谢。

这适用于您的特定示例,但请注意,它是硬编码的:

["{:.0e}".format(n*1e-6) if not n%10 or n<10 else "{:.1e}".format(n*1e-6) for n in list(range(5,60,5))]

[“{.0e}”.format(n*1e-6)如果不是n%10或n您可以将
.0e
部分替换为
e

["{:.1e}".format(n*1e-6).replace(".0e", "e") for n in list(range(5,60,5))]
这给

['5e-06',  '1e-05',  '1.5e-05',  '2e-05',  '2.5e-05',  '3e-05',  '3.5e-05',  '4e-05',  '4.5e-05',  '5e-05',  '5.5e-05']
这仍然会留下指数中的前导零。为了消除这一点,我们可以使用正则表达式:

(e-?)0(\d+)
说明:

  • (e-?)
    :匹配文本
    e
    ,后跟可选减号。捕获组1
  • 0
    :匹配文本零
  • (\d+)
    :匹配一个或多个数字。捕获组2
要进行替换,我们使用
re.sub()

在我们的列表压缩中:

[re.sub(r"(e-?)0(\d+)", r"\1\2", "{:.1e}".format(n*1e-6).replace(".0e", "e")) for n in list(range(5,60,5))]
提供我们想要的:

['5e-6',  '1e-5',  '1.5e-5',  '2e-5',  '2.5e-5',  '3e-5',  '3.5e-5',  '4e-5',  '4.5e-5',  '5e-5',  '5.5e-5']

您是否尝试过为列表(范围(5,60,5))中的n使用[“{.0e}.”格式(n*1e-6)]?我手边没有链接,但搜索浮点是否已断开?@标记在这里不太相关,因为OP可以舍入。此外,我尝试使用
十进制。十进制
,但它将尾随的零计算为sig figs。但作为参考,这里有一个链接:告诉您要使用多少小数位的规则是什么?为什么输出应该包括例如,
'5e-6'
而不是
'5.0e-06'
,特别是考虑到
'1.5e-05'
可以吗?@wjandrea舍入将不会有帮助,除非您让打印功能来完成。有些数字无法用二进制表示,而且随着数字变小,问题会变得更严重。
[re.sub(r"(e-?)0(\d+)", r"\1\2", "{:.1e}".format(n*1e-6).replace(".0e", "e")) for n in list(range(5,60,5))]
['5e-6',  '1e-5',  '1.5e-5',  '2e-5',  '2.5e-5',  '3e-5',  '3.5e-5',  '4e-5',  '4.5e-5',  '5e-5',  '5.5e-5']