- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Arduino,它从我的智能手机(通过蓝牙)接收一条包含 unix 时间戳的消息。现在,我正在尝试将我的 DS1307 与该时间戳同步。
但是,它不起作用,因此,我开始搜索并在将包含时间戳的 C 样式数组转换为 float 时发现了一些奇怪的行为。
// Copy the time into "timeBuff"
int timeLength = siz - _CAT_LENGTH_;
char timeBuff[timeLength+1];
memcpy(timeBuff, &msg[_CAT_LENGTH_], timeLength);
timeBuff[timeLength] = '\0';
// For debugging
Serial.print(F("timeBuff: "));
Serial.println(timeBuff);
// Convert timeBuff string into a variable of type long
float deviceTime = atof(timeBuff);
// Now, deviceTime != what we printed above
Serial.print(F("Epoch time: "));
Serial.println(deviceTime);
前 5 行将消息的右侧部分复制到字符数组中,并添加终止符零。
然后,我们打印timeBuff
的内容并将其转换为float
存储在deviceTime
中。最后,我们打印 deviceTime
。
这是我第一次测试的结果
timeBuff: 1476113620
Epoch time: 1476113664.00
这是第二次测试
timeBuff: 1476115510
Epoch time: 1476115456.00
为什么 atof
的结果与我们传递给它的字符串不同?
最佳答案
在大多数平台上,float
以 IEEE-754 单精度格式表示,这是具有 24 位 (23+1) 尾数的 32 位浮点格式。它根本没有足够的精度来表示您的数字。您的数字需要大约 32 位来表示。当存储在 float
中时,大于 24 位的整数值通常会失去精度。
精度的损失将表现为尾随位的丢失,并在最后剩下的位中舍入
1476113620 -> 01010111111110111011010011010100
1476113664 -> 01010111111110111011010100000000
关于floating-point - atof 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39960244/
我需要将字符串转换为 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;
我是一名优秀的程序员,十分优秀!