读入美元金额(带美元符号)C++
Read in Dollar Amount (with dollar sign) C++
我需要读入一个值(cin),包括一个美元符号和一个美元金额,但我只想读入金额。
换句话说,我有这样的投入:"3458.5美元,"但我想读入并存储"3458.5"
我目前想到的方法是将值作为字符串读取,删除第一个字符,然后转换为双精度。但是,我觉得这种方法效率很低,还有更好的方法。有什么建议吗?谢谢
我同意马格努斯的观点:这似乎是次要的。但如果你真的想这么做,只需读一个字符,然后读一个双字符:
char ch;
double d;
std::cin >> ch >> d;
if(stream.peek() == '$') stream.get();
stream >> amount;
C++98/03有一个money_get
方面来做这样的事情。不幸的是,使用它相当痛苦(说得好听一点)。
C++11添加了一个get_money
操作器,使生活变得简单了许多。它的工作原理是这样的:
#include <iostream>
#include <iomanip>
int main() {
long double amt;
std::cin.imbue(std::locale(""));
std::cout.imbue(std::locale(""));
std::cin >> std::get_money(amt);
std::cout << std::showbase << std::put_money(amt) << "n";
}
现在,这里有几件事需要注意。首先,没有指定从外部表示到内部表示的转换,但在我看到的实现中,$3458.5
将而不是读取为3458.5
——它将被读取并存储为345850
——也就是说,硬币的数量。
然而,当您使用put_money
将数据写回时,它将与输入期间所做的任何操作对称地转换,因此,如果您输入$3458.5
,它将以相同的方式写回。
还有一个警告:我看到至少有一个实现对输入格式异常挑剔,所以在输入过程中需要小数点后0或2位数字,所以$3458.50
或$3458
读起来很好,但$3458.5
根本读不出来(这将被视为转换失败)。
如果使用scanf
而不是cin
,则可以删除$
(如果您知道它将一直存在),并将信息直接写入浮点值。
float d;
scanf("$%f", d);
相关文章:
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 将无符号char*转换为std::istream*C++
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- vscode g++链路故障:体系结构x86_64的未定义符号
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 使用gcc从静态链接的文件中查找可选符号
- C++中无符号字符溢出
- 使用无符号字符数组有效存储内存
- 允许用户输入带或不带美元符号的金额
- c++:如何使用美元符号将双精度格式化为货币
- 将使用预处理器指令来定义美元符号表示的内容会导致任何冲突
- 读入美元金额(带美元符号)C++
- 美元符号在某种程度上与C++指针有关吗
- C++11是否允许在标识符中使用美元符号
- 变量名中的美元符号
- iomanip格式的多个输入和美元符号- c++
- 为什么在c++ /Java和类似的语言中用美元符号开始变量名是不好的?