Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct
Rounding up numbers
I have been trying to round up some numbers but I cannot figure it out. What I have is a little program that when a button is clicked it gets information form 7 input fields and then it makes the following calculations.
// input fields
QString partW = ui->lineEdit_PartWidth->text();
QString partL = ui->lineEdit_PartLength->text();
QString sheetW = ui->doubleSpinBox_SheetWidth->text();
QString sheetL = ui->doubleSpinBox_SheetLength->text();
QString clamp = ui->doubleSpinBox_Clamp->text();
QString kerf = ui->doubleSpinBox_Kerf->text();
QString web = ui->doubleSpinBox_Web->text();
//converting inputs to numbers and adding some other factors partWidth = partW.toFloat() + kerf.toFloat(); partLength = partL.toFloat() + kerf.toFloat(); sheetLength = sheetL.toFloat() - (web.toFloat()* 2); sheetWidth = sheetW.toFloat() - (clamp.toFloat() - .5); partsY = sheetWidth / partWidth; partsX = sheetLength /partLength ; totalParts = partsY * partsX; ui->label_TotalParts->setText(QString::number(totalParts));
Everything is working as it should the only thing is that I want to round up partsY and partsX so that when they are multiplied there are no decimal numbers.
I tried modifying the following line...
@totalParts = round(partsY) * round(partsX);@
but it doesn't work.
I know it may be hard to know whats wrong without seeing the actual code but can someone give it a shot?
Thanks a lot for your help.
koahnig last edited by
The rounding method is called "qRound":http://qt-project.org/doc/qt-4.8/qtglobal.html#qRound .
Jeroentjehome last edited by
I would suggest to round after the multiplication. That is more accurate. qRound is the way to go, so this should work:
@totalParts = qRound(partsY * partsX);@
If you don't want to use the QRound the basic way is to have a float value, add (positive value) or subtract 0,5 (negative value) and typeconvert into a int.
@if(partsY * partsX < 0)
iTotalParts = (int)((partsY * partsX) - 0,5);
iTotalParts = (int)((partsY * partsX) + 0,5);@
I was trying to use qRound when I realized that this could be just a metter of changing my variable type from float to int in fact it did the trick.
Thank you all very much for your help.
andre last edited by
Note that changing the variable type will not result in "natural" rounding. It will result in flooring values. So, 2.9999 will be "rounded" to 2, not 3.
That is actually what I want. But thanks a lot for the clarification.
I love this forum!
Thanks a lot