- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 strtof 转换方面遇到问题,某些值运行良好,但另一些值返回 +1 或 -1 值。我的程序从文件中读取值,但为了简单起见,我尝试将值直接放入 strtof,它具有相同的行为。
我的简单代码:
#include <stdlib.h>
int main(int argc, char **argv)
{
printf("%f", strtof("17309217",NULL));
}
返回
17309216.000000
与转换“17309216”或“17309215”时给出的值相同。
我做了一些更多的测试,似乎有一个“模式”,“17309214”效果很好,但“17309213”、“17309212”和“17309211”都返回“17309212”。此后“17309210”工作正常,但“17309209”、“17309208”和“17309207”返回“17309208”,依此类推...
此行为的解释是什么?现在我用其他方法转换字符串,我不需要方法来转换它。我只想知道为什么 strtof 这样做,这样我就可以决定什么地方可以使用它,什么地方不能使用它。
我一直在阅读一些与错误转换相关的其他问题,但所有问题都与小数舍入有关,而不是整个单位。
提前致谢,
最佳答案
您正在转换为 32 位 float ,该浮点精度可能无法处理那么多数字。
关于C: strtof 单位转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45729828/
这个问题已经有答案了: Is floating point math broken? (33 个回答) 已关闭 4 年前。 编辑- 所以我明白这个问题没有解决办法。有谁知道 C 中的函数可以从数组(s
这个问题已经有答案了: Why are floating point numbers inaccurate? (5 个回答) Why is scanf taking the wrong input f
我有一个关于分配和释放内存的问题。 我想循环读取一个char buffer,并将float值保存到一个vector中。我通过读取 fstream 获取缓冲区。 但我的方法在最后删除缓冲区时总是崩溃。
在 Visual Studio 2013 中,我有以下测试代码: #include #include #include #include int main ( int argc, const
这个问题在这里已经有了答案: How do I print a double value with full precision using cout? (17 个答案) 关闭 6 年前。 这里:
我根本找不到这个函数在哪个库/头文件中,我看了很多人使用这个函数的例子,但是没有结果......这些是我包含的所有内容: #include "Console.h" #include "Direct3D
首先,使用标志 -Wall、-ansi、-pedantic 进行编译。没有警告或错误。并且没有任何调试有帮助。 基本上我的代码工作正常但是当我使用 strtof() 将标记从字符串转换为 float
假设你有一个像“0.1”这样的字符串,它只能近似表示为二进制 float ,你想将它转换为单精度 float 。这可以作为 strtof(s, 0); 或 (float)strtod(s, 0); 直
这可能是什么问题? It doesn't matter what number I choose for str, it is always 26815615859885194199148049996
#include #include #include int main(){ char aaa[35] = "1.25"; char* bbb = &(aaa[0]); char**
我正在尝试将 CSV 文件解析为 C 中的二维数组。我想制作一个具有结构的矩阵: typedef struct { int row; int col; float **arr;
我的这部分 C 代码有些问题。除了返回 0.000 而不是 float 的函数“strtof”之外,一切都应该运行良好。 代码应该做什么:读一行,例如“一个12”如果第一个字符是“a”,则使用 str
可能这是一个非常愚蠢的问题,但我不明白......为了从 ASCII 表示转换为相关数字,我在 Visual Studio 2012 中使用 strtof()。根据 https://msdn.micr
与 包含以下代码给出了 123.34 的输出. #include int main() { char *str="123.34"; float f= strtof(str,NULL)
我的 C 生锈了。我正在尝试将字符串转换为 float (或 double )。我试过 atof() 和 strtof(),并尝试按照说明进行操作 here和 here .运气不好。 这是我的代码:
是否有任何计划添加在当前语言环境下不变的 C 标准库字符串处理函数版本? 目前有很多脆弱的解决方法,例如,来自 jansson/strconv.c: static void to_locale(str
标准 C 库函数 strtof 和 strtod 具有以下签名: float strtof(const char *str, char **endptr); double strtod(const c
标准 C 库函数 strtof 和 strtod 具有以下签名: float strtof(const char *str, char **endptr); double strtod(const c
我在启动时立即收到以下错误,但仅适用于运行 API (ProfilerService.java:44) at [[packagename]].App.(App.kt
我是一名优秀的程序员,十分优秀!