QLcdNumber控件浮点数显示技巧

作用:分别控制显示浮点数的整数位和小数位

思路:将浮点数转换为字符串,拆分为整数部分和小数部分;当整数部分/小数部分不满足需求的个数,就补0或去除多余的字符;最后拼接成字符串显示。

类成员,限制显示的整数位和小数位

    /***@brief: 整数位个数***/
    int integer_bit_;

    /***@brief: 小数位个数***/
    int decimal_bit_;

类成员函数

    /*
     *@function: 数字表显示调整
     *@arg:value 显示值
     *@return value: void
     */
    void AdjustDigital(double value);

函数实现

void NumberTable::AdjustDigital(double value)
{
    auto info = QString::number(value,'f',8);//取八位有效小数,转换为字符串
    auto info_list = info.split('.');
    auto integer_info = info_list.first();//整数部分字符串
    auto decimal_info = info_list.last();//小数部分字符串
    if(value < 0.0) //负数处理
    {
        if(integer_info.size() - 1 < integer_bit_)//负数 有‘-’,-1去除符号
        {
            integer_info.remove('-');
            auto int_size = integer_info.size();
            for(int i = 0; i < integer_bit_ - int_size;i++)
            {
                integer_info.push_front('0');
            }
            integer_info.push_front('-');
        }else       //去除整数部位多余的数
        {
            integer_info.remove('-');
            integer_info.remove(0,integer_bit_ - integer_info.size());
            integer_info.push_front('-');
        }
    }else//非负数处理
    {
        if(integer_info.size() < integer_bit_)
        {
            auto int_size = integer_info.size();
            for(int i = 0; i < integer_bit_ - int_size;i++)
            {
                integer_info.push_front('0');
            }
        }else
        {
            integer_info.remove(0,integer_info.size() - integer_bit_);
        }
    }

    if(decimal_info.size() < decimal_bit_)
    {
        auto dec_size = decimal_info.size();
        for(int i = 0; i < decimal_bit_ - dec_size;i++)
        {
            decimal_info.push_back('0');
        }
    }else
    {
        decimal_info.remove(decimal_bit_,decimal_info.size() - decimal_bit_ + 1);
    }

    auto new_value = QString("%1.%2").arg(integer_info).arg(decimal_info);

    if(value >= 0.0)
    {
        ui->lcdNumber->setDigitCount(new_value.count());
    }else
    {
        ui->lcdNumber->setDigitCount(new_value.count() - 1);
    }
    ui->lcdNumber->display(new_value);
}

界面输入整数位 integer_bit_ = 3;小数位decimal_bit_ = 8;

效果如下

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值