#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
.
有没有办法得到点后的数字?
我无法理解以下atoi
实现代码,特别是这一行: atof
代码:
k = (k << 3) + (k << 1) + (*p) - '0';
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释一下吗?
另一个问题:atoi
实施算法应该是什么?
我正在解析固定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编译.
评论解决方案:
接受的答案更优雅,但这个答案(和评论)也值得快速解决
我编写了以下代码....它应该将像"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时,它打印为零...所以为什么我得到这个模棱两可的结果?
我有一个从文件读入的值,并存储为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,并且没有包含正确的标题.
我有两个使用相同库的示例应用程序,它们之间的主要区别在于一个使用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而改变的情况?
atof()
返回一个双精度值,当我将它分配给一个浮点值时会产生一个警告(是的,我绝对必须使用浮点数)。
所以我的问题是:是否有一个atof()
-variant 可用,它返回一个普通的浮点数?或者我是否必须通过演员表来解决这个问题 - 这会很遗憾,因为它浪费了资源来创建一个会立即被丢弃的替身。
我正在尝试使用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) 我正在做一个程序,其中我要进行矩阵相乘,但我的大问题是将输入转换为我最终要相乘的两个数组。以下是我的转换代码,包括数组的声明。(我删除了输入是 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 时出现错误:“下标值既不是数组也不是指针”我一直在查找该错误,但还没有弄清楚它在我的情况下意味着什么。
我正面临转换问题,我希望得到您的帮助.我正在使用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
,我仍然有同样的问题.有没有办法使用istringstream
与setprecission(2)
由得到显示正确的值aAmount
?