1

我正在寻找基于有效数字(数字)的 Python 中的字符串转换函数/模块。这个功能的用处已经出现了好几次,所以似乎很难相信 Python仍然没有一个函数或模块可以轻松地做到这一点。有谁知道有什么新的出吗?如果不是,这会是一个功能请求的好机会吗?

免责声明:

  1. 我意识到这是一个已经有几个问题的话题,但大多数都是几年前的问题。我希望最近发布了一些东西,就像看起来一样有用。
  2. 我也意识到手动编写一个函数来执行此操作相对简单,但我更喜欢模块或(更好)内置函数以实现可移植性。
  3. 我不是在寻找以指数表示的输出

功能示例:

>>> from somemodule import SDStr

>>> SDStr(num=1234, sigDigs=3)
'1230'

>>> SDStr(num=12.3456, sigDigs=4)
'12.35'

>>> SDStr(num=100, sigDigs=3)
'100.'

>>> SDStr(num=100.0, sigDigs=2)
'100'

>>> SDStr(num=100, sigDigs=4)
'100.0'

>>> SDStr(num=0.001234, sigDigs=2)
'0.0012'
4

1 回答 1

0
import decimal

def rounded(number, figures):
    number = decimal.Decimal(number)
    return format(round(number, -number.adjusted()-1+figures), "f")

decimal跟踪十进制数字,所以显然这是做事的方式。

我只是通过最高有效数字的位置调整有效数字的数量并将其格式化为浮点数。它就像一个魅力。

编辑:出于某种原因,Python 2 不喜欢这个。我会调查的。

好吧,基本上在 Python 2 中round强制转换为 a float(说真的,转移到 Python 3),所以简单的答案是:

from decimal import Decimal

def rounded(number, figures):
    number = Decimal(number)
    decimal_shift = -number.adjusted()-1+figures
    integral = round(number * Decimal(10) ** decimal_shift)
    rounded_decimal = Decimal(integral) * Decimal(10) ** -decimal_shift
    return format(rounded_decimal, "f")
于 2013-09-27T19:28:45.983 回答