modf无法正常工作

mix*_*ill 0 c++ visual-c++ fmodf

如果小数部分的前3位数字包含"9",则此代码应显示,但不起作用.令人惊讶的是,"mod"变量对于任何数字都是0.

int main( void )
{
    float number, dmod;
    int mod;
    double digit_1, digit_2, digit_3;
    double search=9;

    cout<<"Enter the number:";
    cin>>number;

    mod = modf(number, &dmod);
    digit_1 = mod /100 % 10;
    digit_2 = mod /10  % 10;
    digit_3 = mod /1   % 10;

    if( (digit_1 == search) || (digit_2 == search) || (digit_3 ==search) )
    {
        cout<<"mod contains 9"<<endl;
    }
    else
    {
        cout<<"mod does not contains 9"<<endl;
    }
 }
Run Code Online (Sandbox Code Playgroud)

Mar*_*k B 5

你的问题是modf返回小数部分,而不是表示小数部分的整数.返回的值始终小于1,然后在分配给int它时将其截断为0.

也许你想把回报乘以1000: mod = modf(number, &dmod) * 1000.0;