标签: atof

如何将字符串转换为浮点数?

#include<stdio.h>
#include<string.h>

int main() 
{
    char s[100] ="4.0800" ; 

    printf("float value : %4.8f\n" ,(float) atoll(s)); 
    return 0; 
}
Run Code Online (Sandbox Code Playgroud)

我希望输出应该是4.08000000我得到的4.00000000.

有没有办法得到点后的数字?

c floating-point type-conversion atof strtod

48
推荐指数
4
解决办法
17万
查看次数

在C中实现atoi

我无法理解以下atoi实现代码,特别是这一行: atof

代码:

k = (k << 3) + (k << 1) + (*p) - '0';
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释一下吗?

另一个问题:atoi实施算法应该是什么?

c atoi atof

25
推荐指数
2
解决办法
3万
查看次数

与地点无关的"atof"?

我正在解析固定NMEA句子中的GPS状态条目,其中地理分钟的一小部分总是在一段时间之后.但是,在locale将逗号定义为小数分隔符的系统上,atof函数忽略句点和整数小数部分.

处理这个问题的最佳方法是什么?存储在字符数组中的长/纬度字符串,如果重要的话.

示例代码:

m_longitude = atof((char *)pField); 
Run Code Online (Sandbox Code Playgroud)

哪里

pField[] = "01000.3897"; 
Run Code Online (Sandbox Code Playgroud)

跨平台项目,为Windows XP和CE编译.

评论解决方案:

接受的答案更优雅,但这个答案(和评论)也值得快速解决

c++ locale atof

21
推荐指数
3
解决办法
1万
查看次数

将字符串转换为C中的双变量

我编写了以下代码....它应该将像"88"这样的字符串转换为double值88并打印出来

void convertType(char* value)
{
   int i = 0;
   char ch;
   double ret = 0;
   while((ch = value[i] )!= '\0')
   {
      ret = ret*10 +(ch - '0');
      ++i;
   }
   printf("%d",ret);//or %f..what is the control string for double?
}



//input string :88
Run Code Online (Sandbox Code Playgroud)

但它总是打印0 ...但是当我将ret的类型更改为int ...它工作正常...当类型为float或double时,它打印为零...所以为什么我得到这个模棱两可的结果?

c string double atof

12
推荐指数
3
解决办法
8万
查看次数

将char*转换为float或double

我有一个从文件读入的值,并存储为char*.值是货币编号,#.##,##.##或###.##.我想将char*转换为我可以在计算中使用的数字,我尝试了atof和strtod,他们只是给我垃圾数字.这样做的正确方法是什么,为什么我做错的方式呢?

这基本上就是我正在做的事情,只是从文件读入char*值.当我打印出temp和ftemp变量时,它们只是垃圾,巨大的负数.

另一个编辑:

我在gcc中正是这样运行的

#include <stdio.h>
int main()
{
 char *test = "12.11";
 double temp = strtod(test,NULL);
 float ftemp = atof(test);
 printf("price: %f, %f",temp,ftemp);
 return 0;
Run Code Online (Sandbox Code Playgroud)

}

我的输出是价格:3344336.000000,33444336.000000

编辑:这是我的代码

if(file != NULL)
    {
        char curLine [128];
        while(fgets(curLine, sizeof curLine, file) != NULL)
        {               
            tempVal = strtok(curLine,"|");          
            pairs[i].name= strdup(tempVal);
            tempVal = strtok(NULL,"|");
            pairs[i].value= strdup(tempVal);
            ++i;
        }
        fclose(file);
    }

    double temp = strtod(pairs[0].value,NULL);
    float ftemp = atof(pairs[0].value);
    printf("price: %d, %f",temp,ftemp);
Run Code Online (Sandbox Code Playgroud)

我的输入文件是非常简单的名称,值对如下:

NAME|VALUE
NAME|VALUE
NAME|VALUE
Run Code Online (Sandbox Code Playgroud)

价值是美元金额

解决:谢谢大家,我使用的是%d而不是%f,并且没有包含正确的标题.

c atof strtod

10
推荐指数
1
解决办法
11万
查看次数

const char*用C++加倍翻译问题

我有两个使用相同库的示例应用程序,它们之间的主要区别在于一个使用qt而另一个应用程序是控制台应用程序.

在公共库中,我有这个测试代码:

double test = 0.1;
double test2 = atof("2.13134");
double test3 = atof("1,12345");
Run Code Online (Sandbox Code Playgroud)

如果我使用非qt应用程序的值是:

test = 0.10000000000001
test2 = 2.1323399999999999998
test3 = 1   // This is the expected result using a ',' as delimitation character
Run Code Online (Sandbox Code Playgroud)

但是使用qt应用程序:

test = 0.10000000000001
test2 = 2     // This is not expected!!!
test3 = 1.1234500000000000001
Run Code Online (Sandbox Code Playgroud)

有没有'atof'的行为因qt而改变的情况?

c++ qt atof

7
推荐指数
1
解决办法
248
查看次数

atof() 用于 float 而不是 double

atof() 返回一个双精度值,当我将它分配给一个浮点值时会产生一个警告(是的,我绝对必须使用浮点数)。

所以我的问题是:是否有一个atof()-variant 可用,它返回一个普通的浮点数?或者我是否必须通过演员表来解决这个问题 - 这会很遗憾,因为它浪费了资源来创建一个会立即被丢弃的替身。

c atof ansi-c

7
推荐指数
1
解决办法
7097
查看次数

Android FFmpeg:对 atof、log2 和 log2f 的未定义引用

我正在尝试使用android-ndk-r15c链接到为 android 构建的 FFmpeg。我通过下载最新的ffmpeg-3.3.4 FFmpeg 源代码来构建它。

以下是我的链接器列表:

-lavformat -lavcodec -lswscale -lavutil -lavfilter -lswresample -lavdevice -lpostproc
Run Code Online (Sandbox Code Playgroud)

我收到以下错误抱怨

libavformat/hls.c:783: error: undefined reference to 'atof'
libavcodec/ffv1enc.c:146: error: undefined reference to 'log2'
libavcodec/imc.c:428: error: undefined reference to 'log2f'
Run Code Online (Sandbox Code Playgroud)

以下是我的 FFmpeg 相关包括:

#include <stdint.h>
#include <cstdlib>

#define __STDC_CONSTANT_MACROS

extern "C" {

#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "libavutil/mathematics.h"
#include "libavcodec/version.h"
#include "libavutil/rational.h"
#include "libavutil/avstring.h"
#include "libswscale/swscale.h"

}
Run Code Online (Sandbox Code Playgroud)

以下是我为 android 交叉编译 FFmpeg 的构建脚本

#!/bin/bash

cd ffmpeg-3.3.4

NDK=/path/to/ndk/android-ndk-r15c
SYSROOT=$NDK/platforms/android-21/arch-arm/ …
Run Code Online (Sandbox Code Playgroud)

c++ android ffmpeg atof android-ndk

6
推荐指数
1
解决办法
1629
查看次数

无法将 argv[] 中的内容转换为 C 中的 float[][]

我正在做一个程序,其中我要进行矩阵相乘,但我的大问题是将输入转换为我最终要相乘的两个数组。以下是我的转换代码,包括数组的声明。(我删除了输入是 8 个有效浮点数的验证,因为我一直在调试它)。

    //declare the arrays
float a[2][2];
float b[2][2];
float c[2][2];

int main (int argc, char *argv[])
{
    int i,j,k,l;

    i=0;
    l=4;
// declare and initialize arrays
   for( j =0; j<2; j++)
   {
       for(k=0;k<2; k++)
       {
           a[j][k]=atof[argv[i]];
           b[j][k]=atof[argv[l]];
           i++;
           l++;
       }
   }
......
Run Code Online (Sandbox Code Playgroud)

在编译时使用 atof 时出现错误:“下标值既不是数组也不是指针”我一直在查找该错误,但还没有弄清楚它在我的情况下意味着什么。

c floating-point argv atof

5
推荐指数
1
解决办法
1万
查看次数

将lexical cast string提升一倍

我正面临转换问题,我希望得到您的帮助.我正在使用gcc4编译器,我很受限制地使用gcc4.

我想将std :: string转换为double.

std::string aQuantity = aRate.getQuantity();
std::string aAmount = aRate.getAmount(); 

// aAmount = "22.05"

double dQuantity = boost::lexical_cast<double>(aQuantity);
double dAmount = boost::lexical_cast<double> (aAmount);

// dAmount =  22.050000000000001
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我也试过atof,我仍然有同样的问题.有没有办法使用istringstreamsetprecission(2)由得到显示正确的值aAmount

c++ atof lexical-cast

5
推荐指数
0
解决办法
7338
查看次数