C是什么物理量:具有 SI前缀自动缩放功能的漂亮打印物理量

我正在寻找一种优雅的方式来打印具有最合适前缀的物理量(如12300 grams12.3 kilograms)。

def pprint_units(v, unit_str, num_fmt="{:.3f}"):
    """ Pretty printer for physical quantities """
    # prefixes and power:
    u_pres = [(-9, u'n'), (-6, u'µ'), (-3, u'm'), (0, ''),
              (+3, u'k'), (+6, u'M'), (+9, u'G')]
    if v == 0:
        return num_fmt.format(v) + " " + unit_str
    p = np.log10(1.0*abs(v))
    p_diffs = np.array([(p - u_p[0]) for u_p in u_pres])
    idx = np.argmin(p_diffs * (1+np.sign(p_diffs))) - 1
    u_p = u_pres[idx if idx >= 0 else 0]
    return num_fmt.format(v / 10.**u_p[0]) + " " + u_p[1]  + unit_str
for v in [12e-6, 3.4, .123, 3452]:
    print(pprint_units(v, 'g', "{: 7.2f}"))
# Prints:
#  12.00 µg
#   3.40 g
# 123.00 mg
#   3.45 kg

查看unitsPint,我找不到该功能。是否有其他库可以更全面地排版 SI 单元(以处理特殊情况,如角度,温度等)?

10

我曾经解决过同样的问题。和 IMHO 更优雅。虽然没有度或温度。

def sign(x, value=1):
    """Mathematical signum function.
    :param x: Object of investigation
    :param value: The size of the signum (defaults to 1)
    :returns: Plus or minus value
    """
    return -value if x < 0 else value
def prefix(x, dimension=1):
    """Give the number an appropriate SI prefix.
    :param x: Too big or too small number.
    :returns: String containing a number between 1 and 1000 and SI prefix.
    """
    if x == 0:
        return "0  "
    l = math.floor(math.log10(abs(x)))
    if abs(l) > 24:
        l = sign(l, value=24)
    div, mod = divmod(l, 3*dimension)
    return "%.3g %s" % (x * 10**(-l + mod), " kMGTPEZYyzafpnµm"[div])
CommaCalc

这样的程度:

def intfloatsplit(x):
    i = int(x)
    f = x - i
    return i, f
def prettydegrees(d):
    degrees, rest = intfloatsplit(d)
    minutes, rest = intfloatsplit(60*rest)
    seconds = round(60*rest)
    return "{degrees}° {minutes}' {seconds}''".format(**locals())
edit:

增加单位尺寸

>>> print(prefix(0.000009, 2))
9 m
>>> print(prefix(0.9, 2))
9e+05 m

第二个输出不是很漂亮,我知道。您可能想要编辑格式化字符串。

edit:

解析输入,如0.000009 m²。适用于小于 10 的尺寸。

import unicodedata
def unitprefix(val):
    """Give the unit an appropriate SI prefix.
    :param val: Number and a unit, e.g. "0.000009 m²"
    """
    xstr, unit = val.split(None, 2)
    x = float(xstr)
    try:
        dimension = unicodedata.digit(unit[-1])
    except ValueError:
        dimension = 1
    return prefix(x, dimension) + unit
2

decimal模块可以提供帮助。Morover 它可以防止错误的浮点舍入。

import decimal
prefix="yzafpnµm kMGTPEZY"
shift=decimal.Decimal('1E24')
def prettyprint(x,baseunit):
    d=(decimal.Decimal(str(x))*shift).normalize()
    m,e=d.to_eng_string().split('E')    
    return m + " " + prefix[int(e)//3] + baseunit
print(prettyprint (12300,'g'))
>>>> '12.3 kg'

它可以调整为管理格式。

2

如果您有兴趣使用Pint,请查看to_compact方法。

下面是来自 OP 的示例的实现:

import pint
ureg = pint.UnitRegistry()
for v in [12e-6, 3.4, .123, 3452]:
    print('{:~7.2f}'.format((v * ureg('g')).to_compact()))   
>>> 12.00 ug
>>> 3.40 g
>>> 123.00 mg
>>> 3.45 kg

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(764)
Usb修复工具:是否有任何docx修复工具提供有意义的错误消息
上一篇
云服务器怎么赚钱:无服务器 vs无服务器云(serverless vs serverless-stack)
下一篇

相关推荐

  • cv赵路年龄在探索未知的世界中前行

    cv赵路的年龄可以使用以下代码来获取:…

    2023-01-30 08:03:59
    0 63 54
  • cveqc证书提升安全标准的新里程碑

    CVEQC证书是一种用于验证计算机软件安全性的数字证书。它由CVEQC(Common Vulnerability and Exposures Quality Certification)认证中心颁发,旨在帮助软件开发者提高软件安全性,并让用户可以更容易地识别和使用安全的软件。…

    2023-02-13 10:06:26
    0 51 49
  • cv是谁:如何利用CV技能有效地实现职业发展

    示例示例cv是 Vision的简称,它是一种计算机视觉技术,可以使计算机识别和理解图像中的内容。下面是一个使用OpenCV库来识别图像中的文字的示例代码:…

    2023-01-16 10:35:55
    0 24 76
  • cvcc礼仪证书有什么用让你拥有礼仪知识和自信的资格证书

    cvcc礼仪证书是一种认可有礼仪意识的人的证书,用于证明拥有者具有良好的礼仪素养。它可以用来证明拥有者在礼仪方面有所建树,并能够在社会上表现出良好的形象。…

    2023-02-11 07:23:49
    0 90 24
  • cv80航母维护海上安全的力量

    CV-80是一种美国海军航母,由美国海军航空兵建造,于1944年服役。它是第一艘以“空中登陆舰”为目标而建造的航母,也是第一艘以空中登陆为主要任务的航母。它有一个宽敞的甲板,可以容纳大量的飞机,并且可以在不同的天气条件下进行航空作战。…

    2023-02-11 14:30:44
    0 47 10
  • cvc固定方法图片:使用CVC固定方法提升结构安全性

    CVC固定方法图片是一种用于图像分割的技术,它将图像划分为不同的区域,以便更好地分析和理解图像。它使用一种叫做“聚类-维度减少-聚类”(CVC)的方法,通过聚类将图像划分为不同的区域,然后使用维度减少技术来减少图像的复杂性,最后再进行聚类,以得到最终的图像分割结果。…

    2023-02-09 05:33:54
    0 69 54
  • cv计算机视觉开启一种新的人机交互方式

    计算机视觉是指使用计算机来模拟人类的视觉感知能力,以获取和理解图像中的信息。它主要包括图像处理、识别、语义分析、深度学习和计算机图形学等技术。…

    2023-01-21 11:02:50
    0 92 82
  • cv值怎么计算:如何利用CV值提高你的职业成功?

    cv值( of )是一种衡量数据变化的统计指标,它表示的是样本标准差与样本均值之比。公式:cv=σ/μ…

    2023-02-04 08:31:20
    0 41 34

发表评论

登录 后才能评论

评论列表(87条)