Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中将本地化字符串转换为浮点_C - Fatal编程技术网

在C中将本地化字符串转换为浮点

在C中将本地化字符串转换为浮点,c,C,我在char[]中有浮点数。它是DE或PL本地化字符串,并且具有'、'而不是'。作为十进制分隔符。有没有标准的方法可以将这样的字符串转换成float?我在寻找比“替换,使用.并使用atoi”更好的东西。请在之前适当地调用。正如@Omkant所建议的,strod()将为您提供: setlocale(LC_NUMERIC, "de_DE.UTF-8"); errno = 0; val = strtod(myString, &endPtr); if (errno) { // Handl

我在
char[]
中有浮点数。它是
DE
PL
本地化字符串,并且具有
'、'
而不是
'。
作为十进制分隔符。有没有标准的方法可以将这样的字符串转换成float?我在寻找比“替换,使用.并使用
atoi
”更好的东西。请在之前适当地调用。

正如@Omkant所建议的,
strod()
将为您提供:

setlocale(LC_NUMERIC, "de_DE.UTF-8");
errno = 0;
val = strtod(myString, &endPtr);
if (errno)
{
    // Handle error
}
if (*endPtr)
{
    // This tells you that the string had a trail, e.g. "250.99USD"
}
您可以使用NULL而不是&endPtr,如果您确定永远不会尝试转换零,则可以使用
val
为零来检查错误,而不是设置
errno

// Faster, sloppier version
setlocale(LC_NUMERIC, "de_DE.UTF-8");
if (!(val = strtod(myString, NULL)))
{
    // An error occurred, provided myString was not legitimately zero
    // AND is not so large a value as to create overflow.
}
在某些情况下,稍微贵一点的sscanf会更好,因为strtod可以接受十六进制等其他数字格式。在某些情况下,您可能不希望允许非“适当”浮动的内容(例如3.14159)通过转换阶段<代码>strtod()将允许它

另外,
strtod()
将接受(在sloppier版本中,不检测)字符串,如“subsier”(将被解释为带有一个ERIOR尾部的无穷大)。不太可能,但在某些情况下,如果值由用户控制,则可能导致应用程序漏洞。

可能是
strod()
将帮助您。。。只需将“.”替换为“.”并使用atof()。