C++ 为什么当我把一个int乘以一个double时会得到错误的值?

C++ 为什么当我把一个int乘以一个double时会得到错误的值?,c++,math,C++,Math,嗯,我正在我的程序中做一些基本的运算,比如减法和乘法。。。 我为我的类定义了“get”和set方法。。。。但当我将多应用程序操作应用于double和int时,得到的值如下:1.7e-3.17 这是我的密码: 是西班牙语,但是。。。我相信你会理解的 主要内容: 问题在于: void Tienda::calcular(Cliente persona){ double aux,total; int garrafones= persona.getNumeroGarrafones();; arre

嗯,我正在我的程序中做一些基本的运算,比如减法和乘法。。。 我为我的类定义了“get”和set方法。。。。但当我将多应用程序操作应用于double和int时,得到的值如下:1.7e-3.17

这是我的密码: 是西班牙语,但是。。。我相信你会理解的

主要内容:

问题在于:

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;  
在该行之前,添加代码:(或者如果您知道如何设置断点和检查ExpressionValue,请使用受信任的调试器)

printf(“-->%d%.6g%.6g\n”,加拉丰、普瑞西奥文塔、普瑞西奥科斯托)


我相信您可能会发现Tienda对象的成员实例是统一的,并且包含“随机”值。

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

您可能忘记了初始化。确保您正在执行操作的变量已初始化为某个值。我相信您可以在一个简单、自包含的程序中重现该问题。如果你这样做,并用合理的缩进和格式发布,别人更可能阅读它。在那一行上放一个断点,检查“aux”、“garrafones”、“precioVenta”和“precioCosto”的值是什么,这将帮助你了解发生了什么。precioVenta来自哪里?client.setNumeroGarrafones和client.getNumeroGarrafones的实现是什么?您可能希望在调试器中逐步执行,看看不同的变量在什么情况下不是您所期望的……我的答案与Eammon的观点基本相同。如果您不习惯使用调试器,您应该投入一些时间学习如何使用调试器,因为这样可以节省大量时间。但是,现在,您还可以使用一个简单的printf语句执行检查。我同意您应该尝试精确地指出代码出现意外结果的地方:这可能有助于您自己发现问题。下一个问题请记住这一点。最后一句话,或者更确切地说是个人的自白:我喜欢阅读西班牙语的代码!带回美好的回忆:-)这是Tienda类的构造函数:Tienda::Tienda(void){precioVenta=2.5;precioCosto=2.1;ganancia=0;for(int i=0;i“但是现在我的新值0不是像1.06e2586一样罕见…”很抱歉我不明白。你能提供更多细节吗?你说“现在”。这是否意味着您已更改了某些内容?您从printf或调试器中获得的aux、Garrafone、precioVenta和precioCosto的值是多少?对于两个客户端,我得到了这样的结果:我在操作变量之前使用了printf函数…-->5 2.5 2.1-->6 2.5 2.1初始化似乎一切正常…@KevinRi维拉:我尝试了以下方法:int-garrafones=5;double-precioVenta=2.5;double-precioCosto=2.1;double-aux=garrafones*precioVenta-garrafones*precioCosto;printf(“%.6g”,aux);得到了2。你是说你得到了0?
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;