我正在尝试在 Python 2.7.10中解决我的代码中的一些浮点问题.测试时我遇到了格式化方法的奇怪行为:
print "{}".format(0.3000000000004) # 13 decimals

印刷品:0.3

但:

print "{}".format(0.300000000004) # 12 decimals

印刷品:0.300000000004

由于我没有指定格式,为什么它围绕第一个数字呢?是否有默认的允许小数位数?

解决方法

由于未指定格式,因此使用默认类型coercion to string.所以这不是格式问题.对于float .__ str__,Python 2截断精度为12个字符(不包括前导零,如果有的话),在这种情况下截断后,所有尾随零都被清除:
>>> str(0.3000000000004) # unlike str(0.3000000000014) -> '0.300000000001'
'0.3'

添加format_spec:f会给出默认精度6:

>>> '{:f}'.format(0.3000000000004)
'0.300000'

指定宽度和精度,或使用repr获得良好的表示:

>>> '{!r}'.format(0.3000000000004)
'0.3000000000004'

Python 3中的行为有所不同:

>>> str(0.3000000000004)
'0.3000000000004'

浮点数的格式化只由Python 3中的一个函数float_repr处理(它没有特殊的float_str函数):

(reprfunc)float_repr,/* tp_repr */
...
(reprfunc)float_repr,/* tp_str */

而Python2.7分别为__str__和__repr__定义了一个单独的处理程序float_strfloat_repr

(reprfunc)float_repr,/* tp_repr */
...
(reprfunc)float_str,/* tp_str */

我认为这里的决定变量是超过12d.p的精度损失的原因.是PyFloat_STR_PRECISION(在Python 2中定义):

#define PyFloat_STR_PRECISION 12

对于默认转换中超过12个字符的浮点数,它会反转为截断.

格式化浮点数时,Python格式默认舍入的更多相关文章

  1. ios – 如何使用Objective C类中的多个参数调用Swift函数?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  2. xcode – Interface Builder的用户定义的运行时属性不接受浮点数?

    我创建了一个具有float属性的NSView子类,我想在InterfaceBuilder中设置它.在用户定义的运行时属性部分中,唯一合适的类型是数字.但是,如果我想输入一个十进制数,它只是舍入到最接近的整数.这是一个bug还是故意的?解决方法使用字符串类型并输入您的值

  3. ios – Swift:递归值类型

    我有一个结构,我想要一个结构类型的全局变量?这个例子本质上是我实际创建的结构的简化版本.但是,它会抛出错误:有没有办法解决这个问题?

  4. 一 Swift学习之基础部分

    **一Swift学习之基础部分————–借鉴老码团队翻译组-Tyrion**//1.1常量和变量letsum=0//声明常量,值不可修改varnumber=1//声明变量,值可修改varx=0.0,y=1.0,z=2.0//在一行声明多个常量或变量用逗号隔开//1.2类型标注//声明常量或变量时可以加上类型标注,表示这个常量或变量存储的类型,但是如果你没有添加类型,而是赋了初始值,swift会自己推断类型letnum:Int=0varstr:String?Swift提供了两种有符号浮点数类型:Double

  5. Swift语法基础:8 - Swift的常量, 变量, 标注, 命名, 输出, 注释, 分号, 整数, 浮点数, 类型安全和类型推测说明

    Swift是一门新的语言,由于前期稳定性不够,所以导致会有一定的语法差异,有些人看到中文翻译过来的文档,和在Xcode里实现的不一样,就会各种找答案,找问题,我之所以会把我学习Swift遇到的问题共享出来,一方面是为了方便某人不愿意查看英文文档的朋友,另一方面就是为了给我自己做总结,是我在Xcode中一一试过,没有出现问题的我才会发出来,以后也会如此,直到Swift完全成熟稳定了,那我就以最后一个

  6. Swift语法基础:11 - Swift的运算术语, 赋值运算, 数值运算, 复合赋值

    在Swift当中当然是有与或非这三个逻辑运算符,并且兼容大部分C类运算符,比如“”,“=”,“==”,“=”,“+”,“-“,“*”,“/”,这些等等都支持,但这里有一点要注意一下,赋值符号“=”不返回值,以防止把“==”写成“=”导致程序出错.区别于C,Swfit还提供对浮点数类型进行取余预算“%”,还提供了C没有提供的区间,“0..

  7. Swift疑点解决2

    关于Swift中的String类型,String是一个结构体类型包含字符串的unicode但是长度没法算,同样没有length方法。因为Nsstring是OC中的类型,但是苹果工程师做了很好的兼容。还有Swift里一下非常好的方法如varops3=ops.map{$0.description}

  8. Swift教程10-运算符与C语言的不同

    =,==这些运算符和其他语言的类似,是比较前后两个值是否相等,或者大小关系比较字符串内容是否相等,使用==即可但是Swift新增了===恒等于,是针对于引用类型,如两个对象之间是否是同一个对象与之对应的是!运算符示例Swift新增的??

  9. Swift学习:2.整型于浮点数

    整数整数范围你可以访问不同整数类型的min和max属性来获取对应类型的最大值和最小值:Int一般来说,你不需要专门指定整数的长度。Swift提供了一个特殊的整数类型Int,长度与当前平台的原生字长相同:在32位平台上,Int和Int32长度相同。浮点类型比整数类型表示的范围更大,可以存储比Int类型更大或者更小的数字。Swift提供了两种有符号浮点数类型:Double表示64位浮点数。当你需要存储很大或者很高精度的浮点数时请使用此类型。Float表示32位浮点数。

  10. [翻译]Swift编程语言——基本操作符

    基本操作符操作符就是一个简单的符号或者短语,你可以用他们来检查、改变、组合数据。Swift支持标准C的大多数操作符而且有若干改进可以避免代码错误。算数运算符会检测并且不接受溢出的数据,你可以选用Swfit的溢出操作符预防这种情况出现。像C一样,Swift允许你对浮点数取余,同时Swfit也提供了两个C没有的范围操作符(a..术语操作符有一元、二元以及三元的:一元操作符只有一个操作对象(比如-a)。

随机推荐

  1. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  2. python数学建模之三大模型与十大常用算法详情

    这篇文章主要介绍了python数学建模之三大模型与十大常用算法详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感想取得小伙伴可以参考一下

  3. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  4. 使用pyinstaller打包.exe文件的详细教程

    PyInstaller是一个跨平台的Python应用打包工具,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,下面这篇文章主要给大家介绍了关于使用pyinstaller打包.exe文件的相关资料,需要的朋友可以参考下

  5. 基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

  6. Python list append方法之给列表追加元素

    这篇文章主要介绍了Python list append方法如何给列表追加元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. 利用python实现简单的情感分析实例教程

    商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地,下面这篇文章主要给大家介绍了关于利用python实现简单的情感分析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  9. 利用Python上传日志并监控告警的方法详解

    这篇文章将详细为大家介绍如何通过阿里云日志服务搭建一套通过Python上传日志、配置日志告警的监控服务,感兴趣的小伙伴可以了解一下

  10. Pycharm中运行程序在Python console中执行,不是直接Run问题

    这篇文章主要介绍了Pycharm中运行程序在Python console中执行,不是直接Run问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回
顶部