例如,如果我想将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
答案 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;
}