Qt: QString::number()

前言

正文

QString::number() 是 Qt 框架中一个非常实用的静态方法,用于将各种数值类型转换为 QString 对象。这个函数支持整数、浮点数等多种数据类型的转换,并允许指定数值的进制或格式。掌握 QString::number() 的使用方法,对于在 Qt 应用中进行数据展示、日志记录、用户界面更新等操作至关重要。

1. 函数原型

QString::number() 提供了多个重载版本,以支持不同的数据类型和转换需求。以下是主要的重载形式:

1.1 转换整数类型

static QString number(int n, int base = 10);
static QString number(unsigned int n, int base = 10);
static QString number(long n, int base = 10);
static QString number(unsigned long n, int base = 10);
static QString number(qint64 n, int base = 10);
static QString number(quint64 n, int base = 10);

1.2 转换浮点数类型

static QString number(double n, char format = 'g', int precision = 6);

2. 参数详解

2.1 整数类型转换

  • n: 要转换的整数值,可以是有符号或无符号的,支持多种整数类型(如 int, long, qint64 等)。
  • base: 指定转换的进制,默认为 10(十进制)。支持的进制范围为 2 到 36,其中:
    • 2: 二进制
    • 8: 八进制
    • 10: 十进制
    • 16: 十六进制
    • 其他进制如 3, 4, …, 36 也被支持。

注意: 当转换为非十进制时,base 参数必须在 2 到 36 之间,否则将返回一个空的 QString

2.2 浮点数类型转换

  • n: 要转换的浮点数值,通常是 double 类型。
  • format: 指定浮点数的表示格式,常用的有:
    • 'e''E': 科学计数法(如 1.23e+04)
    • 'f': 定点数表示法(如 12345.678)
    • 'g': 自动选择 'e''f' 中更合适的格式
  • precision: 指定小数点后的位数,默认为 6。对于 'f' 格式,这表示小数位数;对于 'e' 格式,这表示有效数字的位数。

3. 使用示例

3.1 整数转换

3.1.1 十进制转换
int main() {
    int num = 12345;
    QString str = QString::number(num);
    qDebug() << "十进制:" << str; // 输出: "12345"
    return 0;
}
3.1.2 十六进制转换
int main() {
    int num = 255;
    QString hexStr = QString::number(num, 16).toUpper();
    qDebug() << "十六进制:" << hexStr; // 输出: "FF"
    return 0;
}
3.1.3 二进制转换
int main() {
    int num = 5;
    QString binaryStr = QString::number(num, 2);
    qDebug() << "二进制:" << binaryStr; // 输出: "101"
    return 0;
}
3.1.4 八进制转换
int main() {
    int num = 64;
    QString octalStr = QString::number(num, 8);
    qDebug() << "八进制:" << octalStr; // 输出: "100"
    return 0;
}

3.2 浮点数转换

3.2.1 默认格式和精度
int main() {
    double pi = 3.141592653589793;
    QString piStr = QString::number(pi);
    qDebug() << "默认格式和精度:" << piStr; // 输出: "3.14159"
    return 0;
}
3.2.2 定点数格式 ('f') 和指定精度
int main() {
    double value = 12345.6789;
    QString fixedStr = QString::number(value, 'f', 2);
    qDebug() << "定点数格式,保留两位小数:" << fixedStr; // 输出: "12345.68"
    return 0;
}
3.2.3 科学计数法格式 ('e')
int main() {
    double value = 0.0001234;
    QString scientificStr = QString::number(value, 'e', 2);
    qDebug() << "科学计数法格式:" << scientificStr; // 输出: "1.23e-04"
    return 0;
}
3.2.4 自动格式选择 ('g')
int main() {
    double value1 = 12345.6789;
    double value2 = 0.0001234;
    QString autoStr1 = QString::number(value1, 'g', 6);
    QString autoStr2 = QString::number(value2, 'g', 6);
    qDebug() << "自动格式选择(大数):" << autoStr1; // 输出: "12345.7"
    qDebug() << "自动格式选择(小数):" << autoStr2; // 输出: "0.0001234"
    return 0;
}

3.3 综合示例

#include <QString>
#include <QDebug>

int main() {
    // 整数转换示例
    int dec = 255;
    QString decStr = QString::number(dec);
    QString hexStr = QString::number(dec, 16).toUpper();
    QString binStr = QString::number(dec, 2);
    
    qDebug() << "十进制:" << decStr; // 输出: "255"
    qDebug() << "十六进制:" << hexStr; // 输出: "FF"
    qDebug() << "二进制:" << binStr; // 输出: "11111111"
    
    // 浮点数转换示例
    double pi = 3.141592653589793;
    QString piDefault = QString::number(pi);
    QString piFixed = QString::number(pi, 'f', 3);
    QString piScientific = QString::number(pi, 'e', 2);
    
    qDebug() << "默认格式:" << piDefault; // 输出: "3.14159"
    qDebug() << "定点格式,3位小数:" << piFixed; // 输出: "3.142"
    qDebug() << "科学计数法,2位有效数字:" << piScientific; // 输出: "3.14e+00"
    
    return 0;
}

输出:

十进制: "255"
十六进制: "FF"
二进制: "11111111"
默认格式: "3.14159"
定点格式,3位小数: "3.142"
科学计数法,2位有效数字: "3.14e+00"

4. 进制转换支持范围

QString::number() 支持从 2 到 36 的进制转换。这意味着你可以将数字转换为二进制、八进制、十进制、十六进制,甚至更高的进制(如 36 进制)。在 36 进制中,使用 0-9 和 A-Z 代表数值。

int main() {
    int num = 123456;
    for(int base = 2; base <= 36; ++base) {
        QString converted = QString::number(num, base);
        qDebug() << QString("Base %1: %2").arg(base).arg(converted);
    }
    return 0;
}

输出部分(简化):

Base 2: "11110001001000000"
Base 3: "12122120000"
...
Base 10: "123456"
...
Base 16: "1E240"
...
Base 36: "2N9C"

5. 注意事项

5.1 进制范围

  • 仅适用于整数类型的转换。
  • base 参数必须在 2 到 36 之间,超出范围将导致返回一个空的 QString

5.2 浮点数精度

  • 在转换浮点数时,precision 参数控制小数点后的位数或有效数字的数量。
  • 过高的精度可能导致字符串过长,需根据实际需求调整。

5.3 字母大小写

  • 对于十六进制及更高进制的转换,默认输出为小写字母。可以通过调用 QString::toUpper()QString::toLower() 方法调整大小写。
int main() {
    int num = 255;
    QString hexStr = QString::number(num, 16); // "ff"
    QString hexUpper = hexStr.toUpper(); // "FF"
    QString hexLower = hexStr.toLower(); // "ff"
    
    qDebug() << "小写十六进制:" << hexStr;
    qDebug() << "大写十六进制:" << hexUpper;
    qDebug() << "小写十六进制:" << hexLower;
    
    return 0;
}

输出:

小写十六进制: "ff"
大写十六进制: "FF"
小写十六进制: "ff"

5.4 负数处理

  • 对于有符号整数,负数会在字符串前加上负号 -
int main() {
    int num = -123;
    QString str = QString::number(num);
    qDebug() << "负数转换:" << str; // 输出: "-123"
    return 0;
}

5.5 边界情况

  • 当数值超过目标类型的表示范围时,可能导致不正确的转换结果或溢出。
int main() {
    long long num = 9223372036854775807; // 最大的 64 位有符号整数
    QString str = QString::number(num);
    qDebug() << "最大64位整数:" << str; // 输出: "9223372036854775807"
    
    num = -9223372036854775807 - 1; // 最小的 64 位有符号整数
    str = QString::number(num);
    qDebug() << "最小64位整数:" << str; // 输出: "-9223372036854775808"
    
    return 0;
}

6. 与其他 QString 转换方法的对比

QString::number() 是将数值类型转换为字符串的主要方法,但 Qt 还提供了其他方法来进行类型转换:

  • QString::fromStdString(const std::string &): 将 std::string 转换为 QString
  • QString::toInt(), QString::toDouble() 等: 将 QString 转换为数值类型。
  • QString::arg(): 用于在字符串中插入数值,支持格式化。

示例: 使用 arg() 进行格式化

int main() {
    int num = 42;
    double pi = 3.14159;
    QString formattedStr = QString("整数: %1, 浮点数: %2").arg(num).arg(pi, 0, 'f', 2);
    qDebug() << formattedStr; // 输出: "整数: 42, 浮点数: 3.14"
    return 0;
}

7. 总结

QString::number() 是 Qt 中用于将数值类型转换为字符串的强大工具,支持多种数值类型和进制转换。通过掌握其不同的重载形式和参数设置,开发者可以灵活地在应用中展示和处理数值数据。无论是简单的十进制转换,还是复杂的多进制或格式化需求,QString::number() 都能提供高效且可靠的解决方案。

关键点回顾:

  • 支持多种数值类型(整数、浮点数)。
  • 允许指定进制(2-36)用于整数类型。
  • 提供浮点数格式化选项('e', 'f', 'g')及精度控制。
  • 可通过 toUpper()toLower() 调整字母大小写。
  • 需要注意参数范围和数值类型的边界情况。

通过合理使用 QString::number(),可以显著提升 Qt 应用中数据处理和展示的灵活性与效率。

小结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值