如何从 'double' 类型中删除小数点以便稍后显示为货币?
How can I delete decimal points from a 'double' type to later be displayed as a currency?
我目前正在构建一个可以显示帐户交易历史的模拟银行应用程序。
交易的一部分自然是金额。
金额在我的程序中以双精度形式存储,这导致其中许多金额以太多的小数点显示(例如 500.000000 英镑而不是 500.00 英镑)。
形成交易时,金额与时间戳和交易类型一起简单地转换为字符串。
我需要一种方法可以在没有额外小数位的情况下存储双精度数。变成字符串前后转换成小数点后两位都无所谓
我不能在这里使用 setprecision(2),因为我还没有将事务写到控制台。
Transaction::Transaction(string desc, string timestamp, double value) {
this->desc = desc;
this->timestamp = timestamp;
this->value = value;
};
string Transaction::toString() {
fullString = "-- " + desc + ": -\x9c" + to_string(value) + " on " + timestamp;
}
I cannot use setprecision(2) here because I am not writing out the transaction to the console yet.
是的,你可以使用它。只需使用 std::ostringstream
:
std::string Transaction::toString() {
std::ostringstream fullString;
fullstring << "-- " << desc << ": -\x9c" << std::setprecision(2) << value << " on " << timestamp;
return fullString.str();
}
如果您使用 C++20 或更高版本,您可以使用 std::format
您可以使用这个辅助函数:
#include <sstream>
#include <iomanip>
std::string value2string(double value)
{
std::ostringstream out;
out << std::fixed << std::setprecision(2) << value;
return out.str();
}
string Transaction::toString() {
fullString = "-- " + desc + ": -\x9c" + value2string(value) + " on " + timestamp;
}
我目前正在构建一个可以显示帐户交易历史的模拟银行应用程序。
交易的一部分自然是金额。
金额在我的程序中以双精度形式存储,这导致其中许多金额以太多的小数点显示(例如 500.000000 英镑而不是 500.00 英镑)。
形成交易时,金额与时间戳和交易类型一起简单地转换为字符串。
我需要一种方法可以在没有额外小数位的情况下存储双精度数。变成字符串前后转换成小数点后两位都无所谓
我不能在这里使用 setprecision(2),因为我还没有将事务写到控制台。
Transaction::Transaction(string desc, string timestamp, double value) {
this->desc = desc;
this->timestamp = timestamp;
this->value = value;
};
string Transaction::toString() {
fullString = "-- " + desc + ": -\x9c" + to_string(value) + " on " + timestamp;
}
I cannot use setprecision(2) here because I am not writing out the transaction to the console yet.
是的,你可以使用它。只需使用 std::ostringstream
:
std::string Transaction::toString() {
std::ostringstream fullString;
fullstring << "-- " << desc << ": -\x9c" << std::setprecision(2) << value << " on " << timestamp;
return fullString.str();
}
如果您使用 C++20 或更高版本,您可以使用 std::format
您可以使用这个辅助函数:
#include <sstream>
#include <iomanip>
std::string value2string(double value)
{
std::ostringstream out;
out << std::fixed << std::setprecision(2) << value;
return out.str();
}
string Transaction::toString() {
fullString = "-- " + desc + ": -\x9c" + value2string(value) + " on " + timestamp;
}