将浮点数转换为一定精度,然后复制到字符串

2025-03-18 08:54:00
admin
原创
48
摘要:问题描述:我有一个浮点数,比如说135.12345678910。我想将该值连接到字符串,但只想要135.123456789。使用 print,我可以通过执行以下操作轻松完成此操作:print "%.9f" % numvar 这numvar是我原来的号码。有什么简单的方法可以做到这一点吗?解...

问题描述:

我有一个浮点数,比如说135.12345678910。我想将该值连接到字符串,但只想要135.123456789。使用 print,我可以通过执行以下操作轻松完成此操作:

print "%.9f" % numvar

numvar是我原来的号码。有什么简单的方法可以做到这一点吗?


解决方案 1:

对于 Python <3 (例如 2.6 [参见注释] 或 2.7),有两种方法可以实现。

# Option one
older_method_string = "%.9f" % numvar

# Option two
newer_method_string = "{:.9f}".format(numvar)

但请注意,对于 Python 3 以上的版本(例如 3.2 或 3.3),最好使用选项二。

有关第二种选择的更多信息,我建议参阅Python 文档中有关字符串格式的链接。

有关选项 1 的更多信息,请参阅此链接,其中有关于各种标志的信息。

Python 3.6(2016年12月正式发布)添加了f字符串字面量,更多信息请见这里,它扩展了该str.format方法(使用花括号来f"{numvar:.9f}"解决原始问题),即

# Option 3 (versions 3.6 and higher)
newest_method_string = f"{numvar:.9f}"

解决了问题。查看@Or-Duan 的回答了解更多信息,但这种方法很快

解决方案 2:

Python 3.6

为了清楚起见,您可以使用f 字符串格式。它的语法与方法几乎相同format,但更美观一些。

例子:

print(f'{numvar:.9f}')

有关新 f 字符串的更多阅读:

  • Python 3.6 中的新增功能(与上面相同的链接)

  • PEP 官方文档

  • Python 官方文档

  • 非常好的博客文章 - 也谈到了性能

以下是各种测试方法的执行时间图表(来自上面的最后一个链接):

执行时间

解决方案 3:

使用round

>>> numvar = 135.12345678910
>>> str(round(numvar, 9))
'135.123456789'

解决方案 4:

如果直到运行时才知道精度,则此其他格式化选项很有用:

>>> n = 9
>>> '%.*f' % (n, numvar)
'135.123456789'

解决方案 5:

格式化不是由打印完成的,它是字符串的一个属性,因此您只需使用

newstring = "%.9f" % numvar

解决方案 6:

要设置 9 位数字的精度,请获取:

print "%.9f" % numvar

返回 2 位数字的精度:

print "%.2f" % numvar 

返回精度为 2 位的数字和浮点转换值:

numvar = 4.2345
print float("%.2f" % numvar) 

解决方案 7:

只要小数点数在范围内,它就可以工作;超出范围则取决于硬件。超过小数点后 14 位,我无法让它匹配。来自数字海拔文件的纬度值

https://docs.python.org/3/tutorial/floatingpoint.html

lat1 = -81.0016666666670072 
lat2 = -81.0016666666670062
assert lat1 == lat2 # no asserion error :(

# try with Decimal
from decimal import *
getcontext().prec = 16
assert Decimal(lat1) == Decimal(lat2) # no asserion error :(

# Lets see string representation
print(f"{lat1:.16f}", f"{lat2:.16f}")
# -81.0016666666670062 -81.0016666666670062 :( Perils of Float

# Lets see how it is store in hardware
print(lat1.hex(), lat2.hex())
# -0x1.4401b4e81b500p+6 -0x1.4401b4e81b500p+6

# 14-th position it is able to identify 
lat1 = -81.0016666666670162 
lat2 = -81.0016666666670062
#-0x1.4401b4e81b501p+6 -0x1.4401b4e81b500p+6
print(lat1.hex(), lat2.hex())
assert lat1 == lat2 # assertion error :)

解决方案 8:

str函数有错误。请尝试以下操作。您将看到 '0,196553',但正确的输出是 '0,196554'。因为该str函数的默认值是 ROUND_HALF_UP。

>>> value=0.196553500000 
>>> str("%f" % value).replace(".", ",")
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2482  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1533  
  PLM(产品生命周期管理)项目对于企业优化产品研发流程、提升产品质量以及增强市场竞争力具有至关重要的意义。然而,在项目推进过程中,范围蔓延是一个常见且棘手的问题,它可能导致项目进度延迟、成本超支以及质量下降等一系列不良后果。因此,有效避免PLM项目范围蔓延成为项目成功的关键因素之一。以下将详细阐述三大管控策略,助力企业...
plm系统   0  
  PLM(产品生命周期管理)项目管理在企业产品研发与管理过程中扮演着至关重要的角色。随着市场竞争的加剧和产品复杂度的提升,PLM项目面临着诸多风险。准确量化风险优先级并采取有效措施应对,是确保项目成功的关键。五维评估矩阵作为一种有效的风险评估工具,能帮助项目管理者全面、系统地评估风险,为决策提供有力支持。五维评估矩阵概述...
免费plm软件   0  
  引言PLM(产品生命周期管理)开发流程对于企业产品的全生命周期管控至关重要。它涵盖了从产品概念设计到退役的各个阶段,直接影响着产品质量、开发周期以及企业的市场竞争力。在当今快速发展的科技环境下,客户对产品质量的要求日益提高,市场竞争也愈发激烈,这就使得优化PLM开发流程成为企业的必然选择。缺陷管理工具和六西格玛方法作为...
plm产品全生命周期管理   0  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用