将double型转换为int型,不进行截断

C++: Converting a double to an int without truncation

本文关键字:int double 转换      更新时间:2023-10-16

例如,如果我想将4.234转换为4234,实质上是删除句号。到目前为止,我已经尝试了一个数学解决方案,因为我不想做繁琐的转换到字符数组。

#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;
}
我的第二个解决方案不工作在输入608.99

First将数字转换为字符串。然后从字符串中删除点并再次将字符串转换为整数。希望这对你有帮助。

或者如果你想用数学方法,只需要将数字乘以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;
}
相关文章: