remaining()在if语句C ++中不起作用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了remaining()在if语句C ++中不起作用相关的知识,希望对你有一定的参考价值。

下面的代码应该输出每个第10个术语(0.0,10.0,20.0等等)直到100.0。但它只输出“0”。有谁知道这是什么问题?

include <iostream>
include <cmath>
using namespace std;

for (double t = 0.0; t < 100.0; t += 0.1)
{
    if (remainder(t, 10.0) == 0)
    {
        cout << t << "
";
    }
}
答案

您正在处理具有固有不准确性的浮点数。 remainder返回一个浮点值并使用==将值精确地检查为0并不总是有效。

您需要使用公差并查看余数是否在公差的范围内:

#include <iostream>
#include <cmath>

int main()
{
    for (double t = 0.0; t <= 100.0; t += 0.1)
    {
        if (std::abs(std::remainder(t, 10.0)) <= 0.001)
        {
            std::cout << t << "
";
        }
    }
}

注意:further reading

以上是关于remaining()在if语句C ++中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

fillOval() 在 if 语句中不起作用[关闭]

else 在 if 语句中不起作用

基本的 If else 语句在 javascript 中不起作用

jQuery if 语句在 for 循环中不起作用

比较 Mongoose 对象 ID 时,if 语句在 Jade 中不起作用

Liquid - if contains 语句在 for 循环中不起作用