在C++中,将价格存储在双精度变量中是否安全?在C#和Java中,您可以使用Decimal。(他们还说在双精度变量中存储价格是非常糟糕的想法)。那么在C++中应该怎么做呢?
在C++中,将价格存储在双精度变量中是否安全?在C#和Java中,您可以使用Decimal。(他们还说在双精度变量中存储价格是非常糟糕的想法)。那么在C++中应该怎么做呢?
long long
。因此,12000 将意味着 120.00。这被称为“定点”算术。但是您需要注意两个货币值的乘法(反正为什么需要呢)。您可以使用 long double
存储价格。
// get_money manipulator example
#include <iostream> // std::cin, std::cout
#include <iomanip> // std::get_money
int main ()
{
long double price;
std::cout << "Please, enter the price: ";
std::cin >> std::get_money(price);
if (std::cin.fail()) std::cout << "Error reading price\n";
else std::cout << "The price entered is: " << price << '\n';
return 0;
}
我建议你使用int
或unsigned int
来以最小的货币单位存储价格。例如,如果一件商品售价为5.99美元,并且你不需要跟踪小于一分钱的价值,请将其存储在int
中,即599
。
5.25
、9.14
等数字,您甚至不需要使用 double
,float
就足够了。18 570.548911545
的数字加上 0.01%
,那么 double
提供的 15 位小数的精度就足够了。long double
。如果还不够,才考虑寻找“更精确的替代方案”。根据多年的ERP开发经验...
价格只能存储在整数(int
, long
, long int
, int64
等),其数量与隐含的小数位有关(例如将$4.00存储为400)。
举个例子,想象一下产品的价格变化。
将第2行的单价存储在double
中会导致四舍五入。不要存储为double
,而是用一个int
变量表示价格1333
和一个表示数量的变量25
,每当需要显示单价时计算。
当以double
、float
等形式存储时,始终存在将十进制值转换为二进制值时出现舍入/精度损失的风险。