gpt4 book ai didi

Python:以科学格式打印,十的幂只是 3 的倍数

转载 作者:行者123 更新时间:2023-12-04 12:58:36 24 4
gpt4 key购买 nike

当以科学格式显示数字时,我还没有找到一种方法来只获取 3 的倍数的指数。 我也没有成功编写一个简单的自定义格式功能。
这是一个快速示例:
在 python 中使用科学记数法的正常行为 .format() :

numbers = [1.2e-2, 1.3e-3, 1.5e5, 1.6e6]

for n in numbers:
print("{:.E}".format(n))
>>> 1.20E-02  
1.30E-03
1.50E+05
1.60E+06
但是,我需要以下输出:
>>> 12.00E-03   
1.30E-03
15.00E+06
1.60E+06
有谁知道让我获得所需格式的便捷方法?

最佳答案

好吧,这取决于您是否希望输出格式始终调整为最接近的 3 次幂,或者是否希望将其调整为最接近的 3 次幂。基本上涉及:您如何处理 1.50E+05 ?应该是150.00E+030.15E+06 ?
情况 1:最接近 3 的低次幂

from math import log10,floor

numbers = [1.2e-2, 1.3e-3, 1.5e5, 1.6e6]


def adjusted_scientific_notation(val,num_decimals=2,exponent_pad=2):
exponent_template = "{:0>%d}" % exponent_pad
mantissa_template = "{:.%df}" % num_decimals

order_of_magnitude = floor(log10(abs(val)))
nearest_lower_third = 3*(order_of_magnitude//3)
adjusted_mantissa = val*10**(-nearest_lower_third)
adjusted_mantissa_string = mantissa_template.format(adjusted_mantissa)
adjusted_exponent_string = "+-"[nearest_lower_third<0] + exponent_template.format(abs(nearest_lower_third))
return adjusted_mantissa_string+"E"+adjusted_exponent_string

for n in numbers:
print("{0:.2E} -> {1: >10}".format(n,adjusted_scientific_notation(n)))
打印出来:
1.20E-02 ->  12.00E-03
1.30E-03 -> 1.30E-03
1.50E+05 -> 150.00E+03
1.60E+06 -> 1.60E+06
情况 2:最近的 3 次幂
def adjusted_scientific_notation(val,num_decimals=2,exponent_pad=2):
exponent_template = "{:0>%d}" % exponent_pad
mantissa_template = "{:.%df}" % num_decimals

order_of_magnitude = floor(log10(abs(val)))
nearest_third = 3*(order_of_magnitude//3+int(order_of_magnitude%3==2))
adjusted_mantissa = val*10**(-nearest_third)
adjusted_mantissa_string = mantissa_template.format(adjusted_mantissa)
adjusted_exponent_string = "+-"[nearest_third<0] + exponent_template.format(abs(nearest_third))
return adjusted_mantissa_string+"E"+adjusted_exponent_string

for n in numbers:
print("{0:.2E} -> {1: >10}".format(n,adjusted_scientific_notation(n)))
打印出来:
1.20E-02 ->  12.00E-03
1.30E-03 -> 1.30E-03
1.50E+05 -> 0.15E+06
1.60E+06 -> 1.60E+06

关于Python:以科学格式打印,十的幂只是 3 的倍数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62561254/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com