C ++:将double转换为int而不截断

时间:2015-08-24 05:30:24

标签: c++

例如,如果我想将4.234转换为4234,基本上删除期间。到目前为止,我已经尝试过数学解决方案,因为我不想对char数组进行繁琐的转换。

#include <iostream>
#include <cmath>

double convert(double numb)
{

    while(   (fmod(numb, 2.0) > 0.0)   &&   (fmod(numb, 2.0) != 1.0)   )
        numb = numb * 10;

    return numb;
}

int main(void)
{
    std::cout << convert(60.49999) << "\n"; //doesn't work
    std::cout << convert(4.3); //works
    return 0;
}

编辑:这看起来效果很好。评论

#include <iostream>
#include <cmath>

double convert(double numb)
{

    while(   (fmod(numb, 2.0) > 0.0)   &&   !(fmod(numb, 2.0) < 1.0)   )
        numb = numb * 10;

    return numb;
}

int main(void)
{
    std::cout << convert(60.49999) << "\n";
    std::cout << convert(4.3); 
    return 0;
}

编辑2:我的第二个解决方案不适用于输入608.99

1 个答案:

答案 0 :(得分:0)

首先将数字转换为字符串。比从字符串中删除点并再次将字符串转换为Integer。 跳这将有所帮助。

或者如果你想通过数学方法而不是简单地将数字乘以10直到它达到其整数范围,而不是检查模式10的值,如果它的0然后偏差10,否则保持数字是你的答案。

#include <iostream>
#include <cmath>
#include <limits>

double convert(double numb)
{
    int imax = std::numeric_limits<int>::max();
    while ((numb*10) <= imax)
        numb = numb * 10;

    int num = numb;
    while ((num%10) == 0)
        num = num / 10;

    return num;
}

int main(void)
{
    std::cout << convert(4.233999999999) << "\n";
    std::cout << convert(4.234) << "\n"; 
    return 0;
}