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

为什么在for循环中递减0.1会在lua[duplicate]中产生这种不希望的结果

阮星火
2023-03-14
j=1
for i=1,10 do 
    j=j-0.1
    print(j)
end

输出为:

共有1个答案

轩辕鸿祯
2023-03-14

lua中的数字是双精度浮点格式,浮点数存在浮点精度误差。事实上,0.1并不完全是0.1,它是0.1的最接近的表示。

可能的修正方法是使用整数或带有单独小数部分的整数。与答案相关的问题:C++如何避免浮点运算错误

 类似资料:
  • 问题内容: 通过测试我发现 这是不合法的: 但这是: 为什么? 问题答案: 第一种方法不合法,因为编译器很明显不能使用在那里声明的声明,因为在该循环中不能再包含其他语句。基本上,该位置的新变量声明将超出下一个语句的范围,因此没有任何用处。 在第二种情况下,循环后跟花括号,这创建了一个新的作用域,您可以使用该变量。

  • } 链接:https://www.hackerrank.com/challenges/java-string-compare/problem

  • 问题内容: 因此,当我发现一些非常奇怪的东西时,我正在使用Node.js REPL和Underscore库。如果I ,则该变量是全局设置的(显然)。然后,当我尝试运行一个简单的命令时,它会打印出来(显然,再次)。但是,此后立即运行,因为变量设置为,它会打印。 为什么这样做呢?如果我从js文件运行相同的代码,则不会发生。这是正常的Node事情,还是全部错误? 仅供参考:节点v0.10.10 问题答案

  • 问题内容: 我想做的是请用户输入一些字符串以读入数组,然后要求用户输入该数量的字符串并将其读入数组。当我运行此代码时,它从不要求我在第一个for循环的第一个循环中输入内容,只打印出“字符串#0:字符串#1:”,然后我就可以输入文本了。为什么会这样,我做错了什么? 问题答案: 缓冲。 输入输入数量时,不会在输入缓冲区中占用换行符的位置。在for循环的迭代0中,缓冲区中已经有一行输入,并且可以立即完成

  • 编辑:为什么在局部变量上这么快?(~16秒进行相同的迭代,但对函数内部的局部变量进行迭代)