gpt4 book ai didi

将本地化字符串转换为 C 中的 float

转载 作者:行者123 更新时间:2023-12-02 05:20:45 28 4
gpt4 key购买 nike

我在 char[] 中有 float 。它是 DEPL 本地化字符串,并且具有 ',' 而不是 '.' 作为小数点分隔符。有没有标准的方法可以将这样的字符串转换为 float ?我正在寻找比“用 . 替换 , 并使用 atoi”更好的东西。

最佳答案

正如@Omkant 所建议的,strtod() 将为您完成:

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 为零来检查错误而不是设置 错误号:

// 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 可以接受其他数字格式,例如十六进制。在某些情况下,您可能希望允许一些不是“适当的” float 的东西,例如3.14159,使其通过转换阶段; strtod() 将允许它。

此外,strtod() 将接受(并且在更草率的版本中,不检测)字符串,例如“INFERIOR”(将被解释为带有尾部的 INFinity的错误)。不太可能,但在某些情况下,如果值在用户的控制之下,它可能会导致应用程序漏洞。

关于将本地化字符串转换为 C 中的 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13890745/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com