当inventory_1设为float类型的全局变量后,void menu::on_spinBox_valueChanged(int value) { inventory_1 -= value; // 根据spinBox的值更新库存 ui->label_3->setText("库存:" + QString::number(inventory_1)); if(ui->spinBox->value()>= 114) {QMessageBox::warning(this, "嘿", "你居然全要了!");} }生成的库存值就乱套了,如何解决?
时间: 2024-02-19 18:58:22 浏览: 59
在这段代码中,inventory_1 是一个全局变量,它的类型是 float。在使用浮点数时,由于计算机内部的精度问题,可能会产生舍入误差,导致最终结果与期望值不符。因此,我们需要使用一些技巧来处理这种情况。
一种解决方法是采用整数计算,将库存数量乘以一个固定的倍数,例如 100,这样就可以避免浮点数计算带来的误差。在显示库存数量时,再将其除以相同的倍数即可。
修改后的代码如下所示:
```
// 定义整型的全局变量 inventory_1_int,表示库存数量的整数部分
int inventory_1_int = 0;
// 定义整型的常量 INVENTORY_SCALE,表示库存数量的倍数
const int INVENTORY_SCALE = 100;
// 在更新库存时,使用整型计算
void menu::on_spinBox_valueChanged(int value) {
int value_int = value * INVENTORY_SCALE;
inventory_1_int -= value_int;
float inventory_1_float = (float)inventory_1_int / INVENTORY_SCALE;
ui->label_3->setText("库存:" + QString::number(inventory_1_float));
if (ui->spinBox->value() >= 114) {
QMessageBox::warning(this, "嘿", "你居然全要了!");
}
}
```
这样,在计算库存时,先将浮点数乘以 INVENTORY_SCALE,得到整数部分,再将整数部分除以 INVENTORY_SCALE 得到浮点数,即为最终的库存数量。这种方法可以避免浮点数计算误差,保证最终结果的精度。
阅读全文