获取 Python Decimal 的精确十进制字符串表示形式?

2023-11-25

如果我有一个PythonDecimal,如何可靠地获得数字的精确十进制字符串(即不是科学记数法)表示而不带尾随零?

例如,如果我有:

>>> d = Decimal('1e-14')

我想:

>>> get_decimal_string(d)
'0.00000000000001'

However:

  1. The Decimal类没有任何to_decimal_string方法,甚至任何to_radix_string(radix) (cf: https://docs.python.org/3/library/decimal.html#decimal.Context.to_eng_string)
  2. The %f格式化程序默认四舍五入到小数点后 6 位 -'%f' %(d, ) ==> '0.000000'- 或者需要精确的小数位数。
  3. The {:f}.format(...)格式化程序appears上班 -'{:f}'.format(d) ==> '0.00000000000001' - however我不愿意相信这一点,因为这实际上违背了文档,其中写着“'f'… 将数字显示为定点数。默认精度为 6"
  4. Decimal.__repr__ and Decimal.__str__有时返回科学计数法:repr(d) ==> "Decimal('1E-14')"

那么,有什么方法可以从Python中获取十进制字符串吗?Decimal?或者我需要自己使用Decimal.as_tuple()?


简短回答:

>>> d
Decimal('1E-14')
>>> '{:f}'.format(d)
'0.00000000000001'

长答案:

As 布兰登·罗兹指出PEP 3101(这是字符串格式 PEP)指出:

格式说明符的语法是开放式的,因为类可以 覆盖标准格式说明符。在这种情况下, str.format() 方法仅传递 str.format() 之间的所有字符 第一个冒号和相关底层的匹配大括号 格式化方法。

因此,Decimal.__format__方法是 python 的字符串格式将用来生成str的代表Decimal价值。基本上Decimal覆盖格式为“智能”,但将默认为格式字符串设置的任何值(即{:.4f}会将小数截断至 4 位)。

这就是为什么您可以信任它(摘自decimal.py:Decimal.__format__):

def __format__(self, specifier, context=None, _localeconv=None):
    #
    # ...implementation snipped.
    #

    # figure out placement of the decimal point
    leftdigits = self._exp + len(self._int)
    if spec['type'] in 'eE':
        if not self and precision is not None:
            dotplace = 1 - precision
        else:
            dotplace = 1
    elif spec['type'] in 'fF%':
        dotplace = leftdigits
    elif spec['type'] in 'gG':
        if self._exp <= 0 and leftdigits > -6:
            dotplace = leftdigits
        else:
            dotplace = 1

    # find digits before and after decimal point, and get exponent
    if dotplace < 0:
        intpart = '0'
        fracpart = '0'*(-dotplace) + self._int
    elif dotplace > len(self._int):
        intpart = self._int + '0'*(dotplace-len(self._int))
        fracpart = ''
    else:
        intpart = self._int[:dotplace] or '0'
        fracpart = self._int[dotplace:]
    exp = leftdigits-dotplace

    # done with the decimal-specific stuff;  hand over the rest
    # of the formatting to the _format_number function
    return _format_number(self._sign, intpart, fracpart, exp, spec)

长话短说,Decimal.__format__方法将根据提供的幂计算必要的填充来表示小数点之前和之后的数字Decimal._exp(在您的示例中,14 位有效数字)。

>>> d._exp
-14
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取 Python Decimal 的精确十进制字符串表示形式? 的相关文章

  • Python获取正确时区的当前时间[重复]

    这个问题在这里已经有答案了 现在我用 import datetime print datetime datetime now strftime X 将当前时间显示为字符串 问题是 我的计算机正在运行Europe Berlin时区 这里不考虑
  • pip 安装最新的依赖版本

    当我使用安装包时pip install e 它仅安装不满足的依赖项并忽略依赖项升级 如何在每次运行时安装最新的依赖版本pip install e 我尝试过使用pip install upgrade e 但是使用这个选项没有任何改变 我仍然得
  • sudo 和 pip 不在同一路径上

    pip and sudo不在我的计算机上的同一路径上 因此当 基本上一直 我需要运行这两个命令时 如下所示 sudo pip install xxx I get sudo pip command not found pip下载软件包 但由于
  • 用于读取类似 CSV 行的 Python 正则表达式

    我想解析传入的类似 CSV 的数据行 值用逗号分隔 逗号周围可能有前导和尾随空格 并且可以用 或 引用 例如 这是有效的行 data1 data2 data3 data4 data5 但这是格式错误的 data1 data2 da ta3
  • 如何进行重定向并保留查询字符串?

    我想进行重定向并保留查询字符串 就像是self redirect加上发送的查询参数 那可能吗 newurl my new route urllib urlencode self request params self redirect ne
  • 清理 MongoDB 的输入

    我正在为 MongoDB 数据库程序编写 REST 接口 并尝试实现搜索功能 我想公开整个 MongoDB 接口 我确实有两个问题 但它们是相关的 所以我将它们放在一篇文章中 使用 Python json 模块解码不受信任的 JSON 是否
  • matplotlib - 将文本包装在图例中

    我目前正在尝试绘制一些pandas数据通过matplotlib seaborn 然而我的一个专栏标题特别长 拉长了情节 考虑以下示例 import random import pandas as pd import matplotlib p
  • Python MySQLdb:connection.close() VS。光标.close()

    如果我使用MySQLdb通过Python连接到MySQL Server 我创建一个connection and a cursor像这样 connection MySQLdb connect cursor connection cursor
  • 如何使用 Python 在表单中选择选项?

    我想知道如何以格式如下的形式选择选项 td align left td
  • 在 Keras 中使用有状态 LSTM 训练多变量多级数回归问题

    我有时间序列P过程 每个过程的长度各不相同 但都有 5 个变量 维度 我试图预测测试过程的估计寿命 我正在用有状态的方法来解决这个问题LSTM在喀拉斯 但我不确定我的训练过程是否正确 我将每个序列分成长度的批次30 所以每个序列都是这样的形
  • PySpark DataFrame 上分组数据的 Pandas 式转换

    如果我们有一个由一列类别和一列值组成的 Pandas 数据框 我们可以通过执行以下操作来删除每个类别中的平均值 df DemeanedValues df groupby Category Values transform lambda g
  • Python:如何“杀死”类实例/对象?

    我希望 Roach 类在达到一定量的 饥饿 时 死亡 但我不知道如何删除该实例 我的术语可能有误 但我的意思是 窗户上有大量 蟑螂 我希望特定的蟑螂完全消失 我会向您展示代码 但它很长 我将蟑螂类添加到策划者类蟑螂种群列表中 一般来说 每个
  • 从函数在 python 3 中创建全局变量

    我想知道为什么在函数结束后我无法访问变量 variable for raw data 代码是这样的 def htmlfrom Website URL import urllib request response urllib request
  • model.predict() 返回类而不是概率

    Hello 我是第一次使用 Keras 我训练并保存了一个模型 作为 json 文件及其权重 该模型旨在将图像分为 3 个类别 我的编译方法 model compile loss categorical crossentropy optim
  • 如何通过 API Gateway 使用事件调用类型调用 Lambda 函数?

    文件说 默认情况下 Invoke API 采用 RequestResponse 调用类型 您可以选择通过将 Event 指定为 InitationType 来请求异步执行 因此 我可以发送到我的函数 python 的就是到处都是 Inspi
  • 无法将 librosa 与 python 3 一起使用

    我已经在 Windows 上的 ubuntu 子系统上使用 pip3 正确安装了 librosa 但是当我尝试执行像这样的简单程序时 import librosa data sr librosa load sound mp3 print d
  • Docker Python 脚本找不到文件

    我已经成功构建了一个 Docker 容器 并将应用程序的文件复制到 Dockerfile 中的容器中 但是 我正在尝试执行引用输入文件 在 Docker 构建期间复制到容器中 的 Python 脚本 我似乎无法弄清楚为什么我的脚本告诉我它无
  • Python 中的可逆 STFT 和 ISTFT

    有没有通用的形式短时傅立叶变换 https en wikipedia org wiki Short time Fourier transform与内置于 SciPy 或 NumPy 或其他什么中的相应逆变换 这是pyplotspecgram
  • Python 子进程:无法转义引号

    我知道以前曾问过类似的问题 但它们似乎都是通过重新设计参数的传递方式 即使用列表等 来解决的 但是 我这里有一个问题 因为我没有这个选项 有一个特定的命令行程序 我使用的是 Bash shell 我必须向其传递带引号的字符串 它不能不被引用
  • 如何从 Pandas 数据框函数调用中回顾之前的行?

    我正在研究 回测交易系统 我有一个包含 OHLC 数据的 Pandas 数据框 并添加了几个计算列 https stackoverflow com questions 12376863 adding calculated columns t

随机推荐

  • 对 Control.Invoke() 的实现感到好奇

    Control Invoke Delegate 到底做了什么才能让委托在 GUI 线程上运行 此外 据我了解 调用将阻塞 直到调用的函数完成为止 它是如何实现这一目标的 我想要一些很好的细节 我希望能学到一些有趣的东西 编辑 控制实现ISy
  • Linq to sql 选择到一个新类

    我的问题是 当我有以下 2 个查询时 第一个查询没有填充 CampaignID 属性 但第二个查询却填充了 这是我的代码 query 1 var query from c in context MCTargets where c Targe
  • Hive 失败:ParseException 第 2:0 行无法识别列规范中“macaddress”“CHAR”“(”附近的输入

    我尝试过跑步hive v f sqlfile sql 这是文件的内容 CREATE TABLE UpStreamParam macaddress CHAR 50 datats BIGINT cmtstimestamp BIGINT modu
  • 如何使用指定的POST参数打开Android浏览器?

    在我的 Android 应用程序中 我需要在浏览器中打开一个链接 该页面只需通过 POST 即可接收一些数据 我可以将这些参数 数据 添加到启动浏览器的意图中吗 你知道这是否可能吗 如果是的话 你能给我一个提示吗 使用网络视图 WebVie
  • IE 的鼠标悬停选项

    我用的是IE7 当鼠标悬停在选项上时 我希望在页面中显示选择框中每个选项的描述 因此 一开始我编写了当鼠标悬停在选项上时在文本框中显示选项值的代码 但它永远不会起作用 它的工作方式就像一个更改事件
  • Tensorflow 对象检测 API - 模型的微调如何工作?

    这是有关 Tensorflow 对象检测 API 的更普遍的问题 我正在使用这个 API 更具体地说 我根据我的数据集微调模型 根据API的描述 我使用的是model main py函数从给定的检查点 冻结图重新训练模型 但是 我不清楚 A
  • PHP 与 HTML 会话

    我有一个使用 PHP 和 HTML 页面的网站 我想创建一个会话来存储登录页面的用户名 但是登录页面是 php 接下来的页面是 html 这是一个问题吗 或者我可以在 html 页面中添加一小段 php 语句 还是我做错了 这是我第一次使用
  • WooCommerce - 更改数量会触发购物车中的 AJAX 调用

    当购物车中的商品数量发生变化时 我想通过 AJAX 更新并重新加载我的购物车 我已经可以通过 AJAX 成功加载到我的购物车了 要加载到我的购物车中 我的 php 函数如下所示 在我的functions php中 function enqu
  • “order by newid()” - 它是如何工作的?

    我知道如果我运行这个查询 select top 100 from mytable order by newid 它将从我的表中获取 100 条随机记录 但是 我对它是如何工作的有点困惑 因为我没有看到newid in the select列
  • 在流星中,有没有一种方法可以访问空格键中的数组索引[重复]

    这个问题在这里已经有答案了 我正在使用流星鲨鱼分支 有没有办法访问空格键中每个块助手内的数组索引 我正在寻找这样的东西 each humans this arrayIndex each 流星 gt 1 2 空格键在 1 2 中获得了很多功能
  • Firebug Net Panel 的计时:加载时间是多少?

    我正在使用 Firebug 网络面板来查看响应时间 网络面板状态栏上 摘要显示如下 10 个请求 90KB 10 22 秒 加载 6 57 秒 这个加载时间是什么意思 这是否意味着一旦从服务器收到内容 页面又需要 6 57 秒才能可用 即
  • 处理 Web 应用程序中的错误 404 - 而非 REST 应用程序

    我正在尝试使用处理 404 错误 ControllerAdvice在完全使用 Javaconfig 配置的 Spring MVC 应用程序中 Spring MVC版本是4 1 5 我读过这个 堆栈溢出示例 1 Stackoverflow 示
  • Android Studio 中的 NoClassDefFoundError 异常

    引起 java lang NoClassDefFoundError 解析失败 Lorg apache http impl client DefaultHttpClient 我无法解决以下错误 原因 java lang NoClassDefF
  • 为什么 Partial 接受其他类型的额外属性?

    给定接口 A 和 B 其中包含x1共有财产 interface A a1 number a2 number x1 number lt lt lt lt interface B b1 number x1 number lt lt lt lt
  • NSMutableDictionary 中 setObject:forKey: 和 setValue:forKey: 的区别在哪里?

    当查看文档时 我几乎看不出有什么大的区别 value 和 object 都是 id 类型 所以可以是任何对象 键曾经是一个字符串 在其他情况下是一个 id 其中一个似乎保留了该物体 而另一个则没有 还有什么 哪一个适用于什么情况 setVa
  • 列表视图中的透明分隔线

    我正在以编程方式创建一个列表视图 我在列表视图元素之间保留了一个分隔线 我希望保留一个透明的分隔线 因为我有一个背景图像要显示 我已经尝试过以下代码 但不起作用 请帮忙 setListAdapter new ArrayAdapter
  • 没有父标签?
  • 可以用吗 li 没有父标签的标签 i e li li some copy 或者一定是 ul substitute your favorite list type li some copy li ul 有关该主题的链接 Spec XHTML
  • java中的多线程应用程序登录

    在多线程环境中进行日志记录的最佳方法和最佳工具是什么 以便每个线程都有自己的记录器实例和单独的文件 这可能吗 您可以尝试使用自定义 Log4J 附加程序 它采用线程 id 作为参数 并根据线程调用它来过滤消息 即时创建它 将其附加到记录器
  • Java 日期与日历

    有人可以建议当前的 最佳实践 吗Date and Calendar types 当编写新代码时 最好总是支持Calendar over Date 或者是否存在这样的情况Date是更合适的数据类型 Date 是一个更简单的类 主要是出于向后兼
  • 获取 Python Decimal 的精确十进制字符串表示形式?

    如果我有一个PythonDecimal 如何可靠地获得数字的精确十进制字符串 即不是科学记数法 表示而不带尾随零 例如 如果我有 gt gt gt d Decimal 1e 14 我想 gt gt gt get decimal string