- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在解析固定 NMEA 句子中的 GPS 状态条目,其中地理分钟的一小部分总是在句点之后。但是,在语言环境将逗号定义为小数分隔符的系统上,atof 函数会忽略句点和整数部分。
处理此问题的最佳方法是什么?存储在字符数组中的长/纬度字符串,如果重要的话。
示例代码:
m_longitude = atof((char *)pField);
在哪里
pField[] = "01000.3897";
跨平台项目,针对 Windows XP 和 CE 编译。
对解决方案的评论:
接受的答案更优雅,但 this答案(和评论)也值得作为快速解决方案了解
最佳答案
你总是可以使用(模错误检查):
#include <sstream>
...
float longitude = 0.0f;
std::istringstream istr(pField);
istr >> longitude;
默认情况下,标准 iostream 使用全局语言环境(反过来,它应该初始化为经典(美国)语言环境)。因此,除非有人先前已将全局语言环境更改为其他内容,否则上述内容通常应该有效,即使您在非英语平台上运行也是如此。要绝对确保使用了所需的语言环境,请创建一个特定的语言环境并在读取之前用该语言环境“灌输”流:
#include <sstream>
#include <locale>
...
float longitude = 0.0f;
std::istringstream istr(pField);
istr.imbue(std::locale("C"));
istr >> longitude;
作为旁注,我通常使用正则表达式来验证 NMEA 字段,提取字段的不同部分作为捕获,然后使用上述方法转换不同部分。 NMEA 经度字段中小数点之前的部分实际上被格式化为“DDDMM.mmm..”,其中 DDD 对应于度数,MM.mmm 对应于分钟(但我猜你已经知道了)。
关于c++ - 独立于语言环境的 "atof"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1333451/
我需要将字符串转换为 float 。如果字符串不是数字,我希望返回 0。 我尝试使用以下代码测试 atof() 函数是否适用于此: printf("%f", atof("1a")); 根据我对atof
我写了一个atof函数,名为atof_beta。我运行它,但结果与atof的结果不一样。 例如:输入:1111111111111111111111111111111111111111111111111
我的 Atof 功能有问题。我正在尝试将字符串转换为 float ,但当我在 Coocox 软件的“调试”部分中尝试时,它没有给出任何错误,输出没有显示任何内容。我尝试了两个函数Atoi和Atof。当
示例.c: #include #include main() { char str[10] = "111.1"; float f = (float)atof(str); pri
我试图使用 atof() 将字符串转换为 double (显然),但结果不是我所期望的。以下是 atof() 之前有关变量值的代码和调试信息: d = atof (arg); next.db = d;
输入文件应以后缀顺序指定单个代数表达式,支持正浮点值和负浮点值以及以下运算:加法 (+)、减法 (-)、乘法 (*)、除法 (/)。所有浮点值和操作都应以空格分隔。我必须扫描以下行: 4 5 + 20
我有一个问题基本上让我感到困惑。首先,我有两个全局数组 - trustArray[] 和 fashionArray[]。这是填充 trustArray 的函数: void getTrust() {
我有一个例程,它获取指数格式的数字(例如 2,5E-02 或 4E+06)作为 QString。当我打印值时,我总是只得到整数,当它们小于 1 时,我总是得到 0。有谁知道我在这里做错了什么?(对于
我正在使用一个库将 Wavefront .obj 文件加载到我的 OpenGL 应用程序中 (tinyobjloader)。我注意到加载对象时出错。当我加载一个坐标为例如的对象时。 0.9999999
在我的 C++ 程序中,我需要创建一个名为 ComplexNumber 的类来保存复数的信息。我已经在头文件中编写了所有函数,并将这些函数移到了 .cpp 文件中。 我当前程序的 atof 函数不起作
我继承了一些代码(从已经离开的人那里)并找到了这个小片段: double minX = xVal.find('.') == string::npos ? (double)atoi(xVal.c_str
我似乎遇到了一些奇怪的问题,atof() 函数无法正确转换某些值。对于相同的值,atoi() 完美运行。 这是我正在做的事情的一小段: ... // frequencies is a std::str
我的问题如下。我尝试将字符串转换为 double 。这样: string str = "1.1"; double d = atof(str.c_str()); 但这不起作用,它只是返回 1; 但如果我
比如说,我有一个(德语)表达式,它显示为 10.401,40(in Mio EUR),我想将其转换为真正的 float (在本例中约为 100 亿) python 。 这是我到目前为止所拥有的: im
所以我使用 atof 将我的字符串转换为 double 。但我需要知道我是否输入错误(如 y564 等)。我怎样才能检查它?我需要正确的号码才能对其进行进一步操作。 double x = atof(s
using namespace std; int main(int argc, char *argv[]) { char c[] = {'0','.','5'}; //char c[]
我正在尝试使用 atof 在 c 语言中将字符数组转换为 double 组并接收不明确的输出。 printf("%lf\n",atof("5")); 打印 262144.000000 我惊呆了。有人可
我正在解析固定 NMEA 句子中的 GPS 状态条目,其中地理分钟的一小部分总是在句点之后。但是,在语言环境将逗号定义为小数分隔符的系统上,atof 函数会忽略句点和整数部分。 处理此问题的最佳方法是
我有一个 Arduino,它从我的智能手机(通过蓝牙)接收一条包含 unix 时间戳的消息。现在,我正在尝试将我的 DS1307 与该时间戳同步。 但是,它不起作用,因此,我开始搜索并在将包含时间戳的
我想我只是太笨了(我都试过了)。帮我离开这里: #include #include int main() { const char * y = "747.0"; double x;
我是一名优秀的程序员,十分优秀!