用户可以进入double
文本框.数字可能包含数千个分隔符.我想在输入数字插入数据库之前验证用户输入.
是否有可以将这样的input(1,555.99
)转换为double
?的C++函数?如果有,如果输入无效,它是否会发出错误信号(我不想最终得到类似的功能atof
)?
类似的东西strtod
,但必须接受数千个分隔符的输入.
使用一个充满了接受千位分隔符的语言环境的流将输入转换为double.
#include <locale>
#include <iostream>
int main() {
double d;
std::cin.imbue(std::locale(""));
std::cin >> d;
std::cout << d;
}
Run Code Online (Sandbox Code Playgroud)
在这里,我使用了未命名的语言环境,它从环境中检索语言环境信息(例如,从操作系统)并设置适当的语言环境(例如,在我的情况下,它设置为类似的en_US
,它支持逗号作为千位分隔符,所以:
Input: 1,234.5
Output: 1234.5
Run Code Online (Sandbox Code Playgroud)
当然,我也可以std::cout
使用某些语言环境(例如)使用不同的千位分隔符,并获得为该语言环境定制的输出(但在这种情况下,我使用了默认的"C"语言环境,它不使用数千个分隔符,只是为了使值的数值性质明显).
如果您需要使用已经作为字符串"在"程序中""的内容执行此操作,则可以使用an std::stringstream
进行转换:
std::string input = "1,234,567.89";
std::istringstream buffer(input);
buffer.imbue(std::locale(""));
double d;
buffer >> d;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1635 次 |
最近记录: |