Qt 使用remquo函数的断言失败
我正在处理的代码旨在创建一个包含104列和104行的电子表格。您可以猜到的列标题增加了字母表。在Z字母之后,有AA到AZ等等 现在,我正在测试这样一个事实:在Z之后,代码从A循环到Z,直到它填充104列标题 代码如下:Qt 使用remquo函数的断言失败,qt,assertion,Qt,Assertion,我正在处理的代码旨在创建一个包含104列和104行的电子表格。您可以猜到的列标题增加了字母表。在Z字母之后,有AA到AZ等等 现在,我正在测试这样一个事实:在Z之后,代码从A循环到Z,直到它填充104列标题 代码如下: #include "spreadhall.h" #include <cmath> SpreadWnd::SpreadWnd() { formulaInput = new QLineEdit; table = new QTableWidget;
#include "spreadhall.h"
#include <cmath>
SpreadWnd::SpreadWnd()
{
formulaInput = new QLineEdit;
table = new QTableWidget;
table->setRowCount(104); // int row = table->rowCount();
table->setColumnCount(104); int col = table->columnCount();
table->setSizeAdjustPolicy(QTableWidget::AdjustToContents);
QString s[26] = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M",
"N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};
QString str = "";
for(int i = 0; i < col; i++)
{
//int r = (i + 1) % 26;
if(i > 25)
{
int q;
int r = remquo(i, 25, &q);
if(r == 0) r = 25;
str = s[r - 1];
}
else
str = s[i];
table->setHorizontalHeaderItem(i, new QTableWidgetItem(str));
}
vLay = new QVBoxLayout;
vLay->addWidget(formulaInput);
vLay->addWidget(table);
this->setLayout(vLay);
}
#包括“spreadhall.h”
#包括
SpreadWnd::SpreadWnd()
{
formulaInput=新QLineEdit;
table=新的QTableWidget;
table->setRowCount(104);//int row=table->rowCount();
table->setColumnCount(104);int col=table->columnCount();
表->SetSizedJustPolicy(QTableWidget::AdjustToContent);
Q字符串s[26]={A”,“B”,“C”,“D”,“E”,“F”,“G”,“H”,“I”,“J”,“K”,“L”,“M”,
“N”、“O”、“P”、“Q”、“R”、“S”、“T”、“U”、“V”、“W”、“X”、“Y”、“Z”};
QString str=“”;
for(int i=0;i 25)
{
int-q;
int r=remquo(i,25,&q);
如果(r==0)r=25;
str=s[r-1];
}
其他的
str=s[i];
表->setHorizontalHeaderItem(i,新的QTableWidgetItem(str));
}
vLay=新的QVBoxLayout;
vLay->addWidget(formulaInput);
vLay->addWidget(表格);
此->设置布局(vLay);
}
循环的For是一段写入头的代码。当我在For循环的第一行使用注释中的代码时,一切正常,标题从A循环回Z。但是当我使用remquo函数时,我在运行时得到一个断言失败。我不明白为什么
有人知道怎么回事吗
N.B:
我不使用余数函数,因为我需要商来设计Z之后的AA,等等
我正在Win8平台上的64位Acer笔记本电脑上使用带MSVC2013的Qt5.3
谢谢 您面临的问题是
remquo()
计算余数方法的结果。如果你看一下,你会发现:
除法运算x/y的IEEE浮点余数
此函数计算的值正好是x-n*y,其中
值n是最接近精确值x/y的整数值
因此,对于某些值,商被四舍五入到下一个整数,余数为负值,即s
数组的负索引
例如,考虑remquo(13,25,x)
。你明白了:
13 / 25 = 0.52
商被四舍五入到1
,得到以下结果的余数:
13 - 1 * 25 = -12
您可以使用而不是remquo()
,它返回预期值:
div_t d = div(13, 25);
qDebug() << d.quot; // x / y --> 0
qDebug() << d.rem; // x % y --> 13
div\u t d=div(13,25);
qDebug()0
qDebug()13
谢谢,这就是我一直在寻找的解决方案。