python 使用固定数量的数字格式化浮点数

2024-01-12

我想用固定数量的数字来格式化我的浮点数。现在我正在做以下事情

format="%6.6g"
print(format%0.00215165)
print(format%1.23260)
print(format%145.5655)

但这输出

0.00215165
1.2326
145.565

我也尝试过format="%6.6f"但它也没有真正给出我想要的......

0.002152
1.232600
145.565500

什么是格式化数字的好方法,以便所有数字都具有精确的宽度 6(并且没有空格),就像这样?

0.002152
1.232600
145.5655

这很复杂,因为你想要精确(小数位数)取决于可用空间,而浮点格式化的总体目标是使有效数字取决于可用空间。要执行您想要的操作,您需要一个函数来根据数字的对数计算所需的小数位数。据我所知,没有内置函数可以为您执行此操作。

def decimals(v):
    return max(0, min(6,6-int(math.log10(abs(v))))) if v else 6

这只是获取数字的日志并将其截断为 int。所以 10-99 -> 1, 100-999 -> 2 等等。然后你可以使用它 result 来计算出数字需要格式化的精度。在实践中 由于极端情况,函数更加复杂:如何处理负数、下溢的数字等。 为了简单起见,我特意在函数中将 6 位小数硬编码了 3 次。

那么格式化就不那么难了:

>>> v = 0.00215165
>>> "{0:.{1}f}".format(v, decimals(v))
'0.002152'
>>> v2 = 1.23260
>>> "{0:.{1}f}".format(v2, decimals(v2))
'1.232600'
>>> v3 = 145.5655
>>> "{0:.{1}f}".format(v3, decimals(v3))
'145.5655'
>>> vz = 0e0     # behaviour with zero
>>> "{0:.{1}f}".format(vz, decimals(vz))
'0.000000'
>>> vu = 1e-10   # behaviour with underflow
>>> "{0:.{1}f}".format(vu, decimals(vu))
'0.000000'
>>> vo = 1234567 # behaviour when nearly out of space  
>>> "{0:.{1}f}".format(vo, decimals(vo))
'1234567'
>>> voo = 12345678 # behaviour when all out of space
>>> "{0:.{1}f}".format(voo, decimals(voo))
'12345678'

You can use %- 表示法而不是调用format但它不是很明显或直观:

>>> "%.*f" % (decimals(v), v)
'0.002152'

你不会说你想用负数做什么。这种方法的作用是采取额外的 显示减号的字符。如果你不想这样,那么你需要减少数量 负数的小数。

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

python 使用固定数量的数字格式化浮点数 的相关文章

随机推荐

  • 使用 libgdx 进行触摸滚动

    我正在尝试在 libgdx 游戏中实现触摸滚动 我有一张宽图像 是房间的全景图 我希望能够滚动图像 以便用户可以看到房间周围的情况 我拥有它 这样我就可以滚动一定的距离 但是当注册新的 touchDragged 事件时 图像会移回到原始位置
  • ASP.NET MVC 资源文件的最佳实践

    以下资源文件的最佳用途是什么 属性 资源 Phil http haacked com archive 2009 12 07 localizing aspnetmvc validation aspx在 DataAnnotation 中使用此资
  • MIUM 8 红米手机后台服务被杀死如何重启

    我在用sticky service用于后台操作 即使应用程序处于运行状态 它在所有手机中也能正常工作closed通过从堆栈中滑动 然后服务重新启动 但在RedMi Note 3w当应用程序通过从堆栈滑动关闭时 service is not
  • 代理背后的 Google Drive API Java 客户端

    我正在尝试使用 Drive API 编写一个 java 客户端驱动器 API v2 https developers google com resources api libraries documentation drive v2 jav
  • 将 WPF 样式触发器绑定到自定义依赖项属性

    我在这里找到了许多类似的线程 但似乎没有一个能解决我的具体问题 我需要在某些条件下突出显示文本框的背景 我创建了一个突出显示属性 并尝试使用样式中的触发器来设置它 但它实际上并没有突出显示文本 这是我的风格 简化了
  • Javascript setTimeout 和重定向 - IE 冻结

    我的页面上有一个脚本用于处理会话超时 当会话到期时在客户端重定向用户 完整的代码有点复杂 但我已经将代码精简到导致问题的原因
  • 更改提交者作者姓名

    我需要 SOS 帮助 我向 bitbucket 提交了一个项目并以我的名字提交 但我需要更改作者姓名 和电子邮件地址 最简单的方法是什么 您可以简单地修改最后一次提交并推送 强制 git commit amend author Your n
  • Nodejs 从 http 请求块中读取 JSON 数据

    我正在使用 Jira API 来获取单票数据 我已成功向服务器设置了 http GET 请求 并且可以将数据显示到控制台 但理想情况下我需要从 JSON 格式的数据中获取某些属性 当我尝试读取属性时 我只是得到了未定义的信息 var req
  • 使用 Mercurial 维护 CMS 和网站

    我对 Mercurial 还很陌生 在阅读了一些教程后 我仍然怀疑什么是完成我打算用它做的事情的最佳方法 我的目标是维护我正在开发的 CMS 添加新功能 修复错误等 并能够轻松地将这些更新分发到我使用所述 CMS 制作的网站 我首先为 CM
  • 如何在vuepress中使用jsx?

    Config docs vuepress config js module exports chainWebpack config isServer gt config module rule js Find the rule use ba
  • 在 Azure Cosmos DB 中使用 REST 进行 CRUD 操作

    我正在尝试使用 REST 在 Azure Cosmos DB 上执行 CRUD 操作 根据链接 https learn microsoft com en us rest api documentdb create a document ht
  • MVC 输入日期时间

    如果我在 MVC 中使用 EditorFor 我的 DateTime 字段会显示未格式化的日期时间 如果我使用旧式 html 我的字段不会收到错误类 div class editor field div
  • 暂停 Elastic Beanstalk 应用程序环境?

    我想在升级数据库时关闭应用程序服务器 有没有办法在不终止 破坏环境的情况下暂停或停止应用程序服务器 我是否可以直接访问 Elastic Beanstalk 负载均衡器并暂时进行更改 而不会对 Elastic Beanstalk 配置或其管理
  • 使用 Hibernate Criteria API 性能不佳

    我有一个使用 Hibernate 与 MsSQL 2005 服务器通信的 Java 应用程序 驱动程序是net sourceforge jtds 1 2 4 一切正常 但性能不佳horrible 我怀疑索引未用于传递给它的查询 因为响应时间
  • 将列表序列化为 JSON [重复]

    这个问题在这里已经有答案了 我正在客户端和 Django 服务器之间发送信息 我想使用 JSON 来实现这一点 我正在发送简单的信息 字符串列表 我尝试使用django core serializers 但是当我这样做时 我得到了 Attr
  • 为什么 /proc/$PID/status 中的 CapEff 全为零

    我从 ping 二进制文件中删除了 setuid 位并添加了cap net raw p而是如下 chmod 755 bin ping setcap cap net raw p bin ping 然后我跑了ping在一个终端中并从另一个终端检
  • 更改 tabbaritem 的字体大小

    是否可以更改选项卡的字体大小 我推荐一个更好的方法 yourTabBarItem setTitleTextAttributes NSDictionary dictionaryWithObjectsAndKeys UIColor whiteC
  • 如何在 Lua 解释器中创建新命令

    编辑 我在ubuntu上 所以在lua解释器中你显然可以调用内置函数 例如 gt 函数名 函数参数 我想创建一个新函数 让 lua 解释器在每次输入时都能识别它 有没有一种方法可以将我的函数添加到 lua 解释器中本机识别的函数列表中 这样
  • “fabs”:使用模板时对重载函数的不明确调用

    我有以下功能 T tContainer t
  • python 使用固定数量的数字格式化浮点数

    我想用固定数量的数字来格式化我的浮点数 现在我正在做以下事情 format 6 6g print format 0 00215165 print format 1 23260 print format 145 5655 但这输出 0 002