C++ 中数字转字符串的实现,

本文深入解析了自定义的num2str函数,该函数能够将各种类型的数值(包括整数、浮点数)转换为字符串,并支持不同进制的转换。对于整数转换,函数支持2至16进制的转换;对于浮点数转换,可以指定小数点后的位数。通过递归方式实现,确保了转换的准确性和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//核心代码,将一个整数转成string类型;
//参数long long int num表示需要转换的数据;
//参数unsigned short jz 表示进制,范围[2,16]。
string num2str(long long int num, unsigned short jz = 10)
{
        static char chars[17] = "0123456789ABCDEF";
    string accord = "";
    if (num < 0)
    {
        num = -num;
        accord = "-";
    }
    jz = jz > 16 ? 10 : jz;
    jz = jz < 2 ? 10 : jz;
    long long int numd10 = num / jz;
    if (numd10 == 0)
        return accord + chars[num % jz];
    else
        return accord + num2str(numd10,jz) + chars[num % jz];
}

//重载
//核心代码,将浮点数转成string类型;
//参数 double num 表示需要转换的数据;
//参数 unsigned int cut 表示精确到小数多少位
string num2str(double num, unsigned short cut = 6)
{
    string accord = "";
    if (num < 0)
    {
        accord = "-";
        num = -num;
    }
    num = num * pow(10, cut);
    if ((long long int)num == 0)
    {
        accord += "0.";
        while (cut--)
            accord += '0';
        return accord;
    }
    string tmp = num2str((long long int)num,10);
    if (tmp.length() <= cut)
    {
        tmp.insert(0, cut - tmp.length(), '0');
        accord = accord + "0." + tmp;
    }
    else
    {
        tmp.insert(tmp.length() - cut,1, '.');
        accord = accord + tmp;
    }
    if (accord[accord.length()-1] == '.')
        accord = accord.substr(0, accord.length() - 1);
    return accord;
}

//函数重载
string num2str(int num, unsigned short jz = 10)
{
    return num2str((long long int)num,jz);
}

string num2str(unsigned int num, unsigned short jz = 10)
{
    return num2str((long long int)num, jz);
}

string num2str(short int num, unsigned short jz = 10)
{
    return num2str((long long int)num,jz);
}

string num2str(float num, unsigned short cut = 6)
{
    return num2str((double)num,cut);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值