为什么当我将 int 乘以双精度时会得到错误的值

Why do i get wrong values when i multiply a int by a double?

本文关键字:错误 双精度 int 为什么      更新时间:2023-10-16

好吧,我正在尝试在我的程序中做一些基本操作,例如减法和乘法......我为我的类定义了"获取"并设置了方法....但是当我将多重运算应用于双精度和整数时,我得到的值如下:1.7e-3.17 ....

这是我的代码:是西班牙语,但...我相信你会明白的

主要:

#include <cstdlib>
#include <iostream>
#include "Tienda.h"
#define numeroClientes 2
using namespace std;
int main(int argc, char *argv[])
{
Cliente arregloClientes[numeroClientes];
string name;
int day, amount,i;
Tienda tienda = Tienda();

for(i=0; i<numeroClientes; i++){
system("cls");
cout<<"Ingrese el nombre del cliente: ";
cin>>name;
arregloClientes[i].setNombre(name);
cout<<"Ingerese numero de garrafones: ";
cin>>amount;
arregloClientes[i].setNumeroGarrafones(amount);
cout<<"Ingrese el dia de la compra"<<endl;
cout<<"0; Lunes 1; Martes 2; Miercoles 3; Jueves 4; Viernes: ";
cin>>day;
arregloClientes[i].setDia(day);
}
//Calculo del monto a pagar
for(i=0; i<numeroClientes; i++){
tienda.calcular(arregloClientes[i]);       
}
system("cls");
//Impresion de los datos
for(i=0; i<numeroClientes; i++){
cout<<"------------------------"<<endl;
arregloClientes[i].imprimir();       
}
cout<<"------------------------"<<endl;
tienda.imprimir();
cout<<"nn";
system("PAUSE");
return EXIT_SUCCESS;

}

class Cliente {
  /* Atributos privados */
  private:
    string nombre;
    int numeroGarrafones;
    int dia; // 1 - 5 
    double totalCancelar;
    /* Metodos publicos */
    public:
     string getNombre();
     int getNumeroGarrafones();
     int getDia();         
     double getTotalCancelar();
     void setNombre(string nomb);
     void setNumeroGarrafones(int nG);
     void setDia(int d);
     void setTotalCancelar(double tC);
     void imprimir();
     string imprimirDia();
  }; // fin de clase Cliente

问题就在这里:

void Tienda::calcular(Cliente persona){
 double aux,total;
  int garrafones= persona.getNumeroGarrafones();;
arregloDias[persona.getDia()]=  arregloDias[persona.getDia()] +                     persona.getNumeroGarrafones(); 
aux = garrafones * precioVenta - garrafones * precioCosto;                   
ganancia = ganancia + aux;
total = garrafones * precioVenta;
persona.setTotalCancelar(total);
 } // fin de calcular
 This one: 
aux = garrafones * precioVenta - garrafones * precioCosto;  

操作成倍增加...正如我之前所说,生成的数字

有人知道发生了什么?

我不认为这是一个整数*双重问题,而是一个单位化的成员问题。

转到感兴趣的行:

aux = garrafones * precioVenta - garrafones * precioCosto;  

在该行之前,添加代码:(或者,如果您知道如何设置断点和检查表达式值,请使用受信任的调试器)

printf("--> %d %.6g %.6g", garrafones, precioVenta, precioCosto);

我相信您可能会发现 Tienda 对象的成员实例是单位化的,并且包含"随机"值。

在计算之前使用"tienda"的唯一时刻是调用构造函数时。您应该检查您是否在该构造函数中初始化 precioVenta 和 precioCosto,我想这些是固定值并且属于"Tienda"类,以防它们不是全局变量(在这种情况下,您应该初始化它无论如何)。