当前位置: 首页 > 知识库问答 >
问题:

Python float为什么不解释精度?

余信然
2023-03-14

关于浮点数学。2017年是否有可能重新设计计算机/标准,以便

--int(x)

--十进制(固定位置,无轨迹x.x或x.xxn)((同时我在下面的答案中创建了一个hack))

--浮子(这里允许小径,就像浮子的深奥本质x. n?)

下面是我写的原文和一段视频,介绍了浮点CppCon 2015:

我正在编写一个迭代器,它将从0.0循环到3.0。

i = 0.0
while i < 3:
  do something with i
  i += 0.2

但是当我做=0.2时,结果不是预期的0.2,然后是0.4,而是

0.19999990,然后是0.399999999

如果我做圆它没有帮助。

如果我这样做了

from decimal import Decimal, getcontext 

数字变得更糟。

Python是否会疯狂(e)正确解释0.2增量就意味着0.2增量,而不是更长的小数?我的意思是在int和float之间有什么东西能起作用,而decimal不能。或者我在学校被错误地教导0.1意味着0.1000009?

共有1个答案

西门伟
2023-03-14

编辑:下面的“解决方案”在经过多次测试之前似乎是一个解决方案。这和正常的浮动一样糟糕。

老:我做了一个黑客。。。。。它“有效”,并且能够缩小到程序员愿意承受嵌套while循环的程度。我称之为嵌套整数十进制方法或飞行驴子。

a1 = 0
a2 = 0
b = str(a1)+'.'+str(a2)
float(b)

例如:

while a1 < 3:
  b2 = 0
  while a2 < 10:
    b = str(a1)+'.'+str(a2)
    do stuff including float(b)
    a2 += 1
  a1 += 1
 类似资料:
  • 本文向大家介绍请解释一下String为什么不可变?相关面试题,主要包含被问及请解释一下String为什么不可变?时的应答技巧和注意事项,需要的朋友参考一下 考察点:面向对象 不可变对象是指一个对象的状态在对象被创建之后就不再变化。不可改变的意思就是说:不能改变对象内的成员变量,包括基本数据类型的值不能改变,引用类型的变量不能指向其他的对象,引用类型指向的对象的状态也不能改变。 String 不可变

  • 本文向大家介绍解释下为什么 会换两行?相关面试题,主要包含被问及解释下为什么 会换两行?时的应答技巧和注意事项,需要的朋友参考一下 p { display: block; margin-block-start: 1em; margin-block-end: 1em; margin-inline-start: 0px; margin-inline-end: 0px; } 查阅p标签的用户代理可知,默

  • 我有一个简单的批处理测试文件test.bat如下行: 当我运行它时,我希望得到的是测试,而不是: 为什么batch会试图解释这条评论?或者这里发生了什么?如果我去掉注释,脚本会按预期打印测试。 文件中也没有提到这一点。

  • 问题内容: 我认为“请从“ relation_title =’xxxxxxxxx’的表中选择*”;通过索引返回relationship_title =’xxxxxxxxx’的行。但这比实际数字小。 问题答案: 它显示了要获得结果所经过的行数。 数据错误的原因是EXPLAIN不准确,它会基于存储在表中的信息来猜测数据。 这是非常有用的信息,例如在许多表上执行JOINS时,并且您要确保没有遍历整个联接

  • 问题内容: 因此,我刚刚发现MySQL中最令人沮丧的错误。 显然,该字段及其支持功能不支持比秒更高的精度! 所以我正在使用PHP和Doctrine,我真的需要那些微秒(我正在使用属性)。 我发现我可以使用一个字段来存储值。但是学说会增加毫秒吗?我认为它只是将NOW()分配给该字段。我还担心通过代码散布的日期操作功能(在SQL中)会中断。 我还看到了有关编译UDF扩展的内容。这是不可接受的,因为我或

  • 同事们,我的测试类中有@Ignore注释 我的pom看起来: 结果我收到: [信息]正在扫描项目...[INFO][INFO]-----------------------------------------------------------------------------------------------------------------------------------------