使用自定义 numpunct 将字符串转换为双精度不能按预期工作
Convert string to double using custom numpunct doesn't work as expected
我正在尝试使用自定义 numpunct
将字符串转换为双精度数。如果字符串不是货币样式格式,我希望转换失败——例如1,000,000.0
#include <iostream>
#include <sstream>
using namespace std;
class ThousandCommaSeparator: public std::numpunct<char>
{
public:
ThousandCommaSeparator(){}
protected:
virtual char do_decimal_point() const { return '.'; }
virtual char do_thousands_sep() const { return ','; }
virtual string_type do_grouping() const { return "";}
};
int main()
{
istringstream ss("2015/05/03");
ss.imbue(locale(cout.getloc(),new ThousandCommaSeparator));
double output;
if (ss >> output)
{
cout << "Success: " << output << endl;
}
else
{
cout << "Failure: " << output << endl;
}
}
我希望上面的操作失败,但它总是成功,并将输出值设置为 2015。我猜我使用 numpunct
不正确,希望有人能指出我正确的方向!
输入流中的千位分隔符是可选的。如果它们存在,则必须正确放置它们,但它们不必存在。
因此,2015
是转换为数字的有效输入,与 std::numpunct
无关。
我正在尝试使用自定义 numpunct
将字符串转换为双精度数。如果字符串不是货币样式格式,我希望转换失败——例如1,000,000.0
#include <iostream>
#include <sstream>
using namespace std;
class ThousandCommaSeparator: public std::numpunct<char>
{
public:
ThousandCommaSeparator(){}
protected:
virtual char do_decimal_point() const { return '.'; }
virtual char do_thousands_sep() const { return ','; }
virtual string_type do_grouping() const { return "";}
};
int main()
{
istringstream ss("2015/05/03");
ss.imbue(locale(cout.getloc(),new ThousandCommaSeparator));
double output;
if (ss >> output)
{
cout << "Success: " << output << endl;
}
else
{
cout << "Failure: " << output << endl;
}
}
我希望上面的操作失败,但它总是成功,并将输出值设置为 2015。我猜我使用 numpunct
不正确,希望有人能指出我正确的方向!
输入流中的千位分隔符是可选的。如果它们存在,则必须正确放置它们,但它们不必存在。
因此,2015
是转换为数字的有效输入,与 std::numpunct
无关。