欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > VS+QT--实现二进制和十进制的转换(含分数部分)

VS+QT--实现二进制和十进制的转换(含分数部分)

2025/2/23 1:59:05 来源:https://blog.csdn.net/quaer/article/details/142149571  浏览:    关键词:VS+QT--实现二进制和十进制的转换(含分数部分)

实现效果:

 主要文件:BtD_DtB_converter.cpp

#include "BtD_DtB_converter.h"
#include <qpushbutton.h>
#include <qlineedit.h>
#include <qstring.h>
# pragma execution_character_set("utf-8")  
BtD_DtB_converter::BtD_DtB_converter(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);this->setFixedSize(780, 400);//创造两个转换按钮QPushButton* convert1 = new QPushButton(this);convert1->setGeometry(300, 100, 110, 50);convert1->setText("二进制到十进制");QPushButton* convert2 = new QPushButton(this);convert2->setGeometry(300, 200, 110, 50);convert2->setText("十进制到二进制");//创造四个输入框LineEditQLineEdit* B_to_D_start = new QLineEdit(this);B_to_D_start->setGeometry(100, 100, 100, 50);QLineEdit* B_to_D_end = new QLineEdit(this);B_to_D_end->setGeometry(500, 100, 100, 50);QLineEdit* D_to_B_start = new QLineEdit(this);D_to_B_start->setGeometry(100, 200, 100, 50);QLineEdit* D_to_B_end = new QLineEdit(this);D_to_B_end->setGeometry(500, 200, 100, 50);//连接两个点击信号和槽函数//二进制转换为十进制connect(convert1, &QPushButton::clicked, [=](){QString str_start = B_to_D_start->text();//先查找是否有小数点//如果没有小数点 只使用int数据类型存放即可double NUM_END = 0;double power = 1;if (str_start.indexOf('.') == -1){for (int i = str_start.length()-1; i >= 0; i--){NUM_END += power * (str_start[i] == '1' ? 1:0);power *= 2;}}//最后显示在右边的搜索框中else{power = 1 / (pow(2, str_start.length() - 1 - str_start.indexOf('.')));for (int i = str_start.length() - 1; i > str_start.indexOf('.'); i--){NUM_END += power * (str_start[i] == '1' ? 1 : 0);power *= 2;}//计算小数部分结束,计算整数部分power = 1;for (int i = str_start.indexOf('.') - 1; i >= 0; i--){NUM_END += power * (str_start[i] == '1' ? 1 : 0);power *= 2;}}B_to_D_end->setText(QString::number(NUM_END));});//十进制转换为二进制connect(convert2, &QPushButton::clicked, [=](){//如果没有小数点QString str_start = D_to_B_start->text();QString str_end = "";//先查找是否有小数点//如果没有小数点 只使用int数据类型存放即可int NUM_END = 0;int power = 2;if (str_start.indexOf('.') == -1){int NUM = str_start.toInt();for (; NUM != 0; ){str_end.append(QString::number(NUM % 2));NUM /= 2;}}//如果有小数点else{double NUM2 = str_start.toDouble();int NUM = NUM2;//NUM为整数部分,与前兼容NUM2 = NUM2 - NUM;//保留的小数部分后面进行处理.for (; NUM != 0; ){str_end.append(QString::number(NUM % 2));NUM /= 2;}//反转for (int i = 0; i < str_end.length() / 2; i++){QChar temp = str_end[i];str_end[i] = str_end[str_end.length() - 1 - i];str_end[str_end.length() - 1 - i] = temp;}//添加小数点str_end.append('.');//添加小数部分int NUMofLeft;//乘2后的整数部分for (; NUM2 != 0; ){NUM2 *= 2;NUMofLeft = NUM2;str_end.append(QString::number(NUMofLeft));NUM2 = NUM2 - NUMofLeft;//减去整数部分.}D_to_B_end->setText((str_end));return;}//最后显示在右边的搜索框中 注意要反转 注意:使用的是QChar而不是QChar的引用!for (int i = 0; i < str_end.length()/2; i++){QChar temp = str_end[i];str_end[i] = str_end[str_end.length() - 1 - i];str_end[str_end.length() - 1 - i] = temp;}D_to_B_end->setText((str_end));});
}BtD_DtB_converter::~BtD_DtB_converter()
{}

总结:

  • 对算数溢出的部分尚未关注,数字较大时要切换为long或者longlong或者用算法来改进.
  • 使用QChar而不是QCharRef进行交换.(Ref是引用
  • 对于十进制切换为二进制,尚未设置一个明确的精度,用的可能是QLineEdit的最大宽度(存疑
  • indexof找到QString对应的小数点的位置,xx?a:b ,toInt,QString::number()等方法的应用.
  • pow()方法与power易混淆,以后起名尽量不使用power.
  • 带有UTF-8和BOM的编码时,使用# pragma execution_character_set("utf-8") 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词