为什么当我将 int 乘以双精度时会得到错误的值
Why do i get wrong values when i multiply a int by a double?
好吧,我正在尝试在我的程序中做一些基本操作,例如减法和乘法......我为我的类定义了"获取"并设置了方法....但是当我将多重运算应用于双精度和整数时,我得到的值如下: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"类,以防它们不是全局变量(在这种情况下,您应该初始化它无论如何)。
相关文章:
- 错误C++在Visual Studio 2019中使用numeric_limits的长双精度最小值/最大值
- 野牛/flex:计算器将双精度值解释为整数,所以我添加了 YYSTYPE 双精度 #define 但我有多个编译错误
- 为什么 2 个双精度值之间的差值计算错误?
- 为什么使用 int64_t 会产生错误的结果,而双精度则按预期进行简单的整数乘法
- CIN 双精度和不带空格的字符串会导致错误
- 标准库to_string(双精度)在 vs2015 中给出错误的值.有什么解决办法吗?
- 使用 gcc 编译时,PowerPC 上的长双精度错误
- 在发布版本中划分两个双精度的结果错误
- 由于C++中双精度类型的准确性而导致的错误
- 错误:类型"类特征::张量<双精度,3>"参数提供给"删除",预期指针
- C++ - 泛型结构的成员在分配双精度时给出错误的值(但适用于整数)
- Xcode 错误:指针和双精度之间的比较
- C++ 错误错误:数组下标的类型"双精度 [10][10][double]"无效
- 为什么当我将 int 乘以双精度时会得到错误的值
- C++ [链接器错误] 未定义对"执行计算(字符,双精度)"的引用
- 长双精度在 MinGW 上打印错误
- 如何在Xcode中将长双精度转换为字符串格式?或如何解决错误"use of undeclared identifier 'to_string' "
- 将双精度转换为 int 的结果是错误的
- 试图在C++中验证双精度有效输入的循环错误
- C++ 传递一个 int,错误地说这是一个双精度