十进制的小数怎么转换成十六进制
发布网友
发布时间:2022-03-31 06:00
我来回答
共2个回答
懂视网
时间:2022-03-31 10:21
小数的十进制转换成十六进制的方法如下:
十进制小数转N进制小数,方法为乘N取整,每次乘以相应之后基数后取结果的整数部分即可。需要注意的是并非所有的十进制小数都能完全转化为N进制小数,这时就需要取近似值。比如这里的0.9032转化成16进制小数。
0.9032乘以16等于14.4512 取整数14即可。
热心网友
时间:2022-03-31 07:29
#include <iostream>
#include <string>
#include <list>
using namespace std;
void list2str(string &str, list<char>&dat)
{
str.clear();
while (dat.size())
{
str.push_back(dat.front());
dat.pop_front();
}
}
bool Dec2Any(string &str, double src, int system, int precision=6)
{
if (system < 2 && system > 36)
return false;
char fmt[] = "0123456789abcdefghijklmnopqrstuvwxyz";
int num = src;
list<char>dst;
str = "";
while (num >= system)
{
dst.push_front(fmt[num % system]);
num /= system;
}
dst.push_front(fmt[num]);
if (src < 0)
dst.push_front('-');
double idat, dot = modf(src, &idat);
if (dot == 0)
{
list2str(str, dst);
return true;
}
if (precision > 0)
dst.push_back('.');
for (int i = 0; i <= precision; i++)
{
dot = modf(dot*system, &idat);
dst.push_back(fmt[(int)idat]);
if (dot == 0)
break;
}
list2str(str, dst);
return true;
}
int main()
{
double a = 156.48956;
string str;
Dec2Any(str, a, 16, 15);
cout << str << endl;
return 0;
}
整数取余,小数相乘后取整。