问题标签 [strtod]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
550 浏览

c - C - strtod() 不识别小数点

我有一个缓冲区,其中有“随机”数字,用逗号分隔。例如 :

“1589.3,12478.359,485.39971”等

我需要检查小数部分和整数部分的长度。

我做了一些研究,我决定在我的缓冲区上使用 strtod() 以获得一个数字。

但是,它没有按预期工作。所以我尝试了一个简单的例子:

这会打印 3113,所以我做了一些研究,发现我应该使用 %f,因为它不是整数。

所以我纠正了它:

然后它打印我 0.000000

我尝试使用逗号 (,),使用普通模板 (.) 中的点和数字键盘 (.) 中的点。他们都给了我相同的结果。

我正在使用 dev c++(我无法选择,我不是工作站的管理员)。

感谢您的关注和帮助:)

0 投票
2 回答
260 浏览

c - 如何在便携式C中将很长的字符串转换为double

我想在 C 中以可移植的方式将一串很长的数字转换为双精度数。就我而言,可移植意味着它可以在 Linux 和 Windows 中工作。我的最终目标是能够将一串数字打包成一个 8 字节的 double 和 fwrite/fread 到/从二进制文件。该号码始终是无符号的。

我正在使用这个字符串来打包 4 位数的年份、2 位数的月份、2 位数的日期、4 位数的 HH:MM、1 位数的变量和 10 位数的值。因此,尝试将 23 个字节打包成 8 个字节。

我已经尝试了所有标准的东西:

这些都不起作用;他们都将最后几个数字四舍五入。任何便携的方式来做到这一点?

0 投票
2 回答
243 浏览

c++ - Why does strol need a radix when strtod does not?

I've been working with cin input recently, and I discovered that strtol needs a radix: long int strtol (const char* str, char** endptr, int base);, but strtod does not: double strtod (const char* str, char** endptr);. Obviously, double numbers can be represented in other bases, so why this dichotomy?

0 投票
2 回答
136 浏览

c - 从 csv 读取,strtod 无法读取带数字的字符串

当我阅读以下文件时

我的代码无法读取值列。我使用strtod但结果是:

并且值始终为 0。我该如何解决这个问题?这里的代码:

0 投票
1 回答
120 浏览

java - Java 编译器的文本到浮点值转换是否与 strtod 不同?

Java 语言规范第 3.10.2 点声明浮点值按照 IEEE 754 标准中的规定进行转换。对于strtod,C 标准指定函数如何将文本转换为浮点值。关于表示本身,两者似乎涵盖了相同的情况。我不确定的是,四舍五入规则如何?Java 编译器的转换是否与实际转换不同strtod

背景是我想编译为 Java 字节码代码,因此需要将浮点/双精度值的文本表示转换为类文件中的表示。

例如,这个 Java 代码打印一个更精确的值:

使用 strtod 转换相同的值并将其打印出来会打印出不太精确的值:

这是输出问题,还是实际以不同方式转换的值?

编辑:正如 Pascal Cuoq 评论的那样,当以全精度打印出值时(我通过 settings 这样做std::cout.precision()),值是相等的,所以我假设转换导致相同的值。我想我会为此做一个测试。:-)

0 投票
2 回答
478 浏览

c++ - 使用 Visual Studio 2015,64 位的 std::strtod() 中的十进制错误

std::strod()将字符串转换为双精度。但在一种特殊情况下,存在一个微小的小数错误。atof()使用和也可以看到此错误sscanf()仅当满足以下所有条件时才会发生错误:

  • Visual Studio 2015(或 VS 2015 更新 1)
  • 为 64 位 (x64) 构建
  • 调用以_controlfp_s()设置“向负无穷舍入”
  • 数字有小数部分,例如 0.5 或 2.5(不是整数)

(我只在 64 位 Windows 8.1 Enterprise 上测试过)这里有一个简单的例子:

std::stod()正在调用std::calling strtod()stdlib.h。 res1正好是 0.5,但res2会是 0.50000000000000011

_controlfp_s(&tmp, RC_DOWN, MCW_RC);控制舍入误差,在这种情况下,它设置为向负无穷大舍入。如果将其设置回默认值,_controlfp_s(&tmp, RC_NEAR, MCW_RC);则 thenstrod()再次精确,res30.5也是如此

请注意,某些十进制数无法精确表示。但有些数字可以,例如 2.5、0.5 和 0.375,但在上面的示例中它们都会出现舍入误差。

很奇怪,不是吗?

我做错了什么,还是这是 Visual Studio 标准库中的错误?

0 投票
1 回答
978 浏览

c - 将 char * 转换为 double,而不会丢失 c 中的精度

我需要帮助。我必须在不丢失精度的情况下将 char * 转换并存储为 double 或 long double 。

事实上,我尝试使用strtoldatof方法(也是strtold),但这些方法正在四舍五入该值。

例如:

打印:39.751971

printf("%6.7f",ld)给了我正确的值,但我无法存储到变量中。

0 投票
1 回答
441 浏览

c - 将字符串解析为C中的浮点数

我正在运行一个程序,该程序打开一个 .csv 文件,该文件在每行上包含 3 个不同的(浮点)值。我想将不同变量中的不同值分开。为此,我已经使用了 strtod() 函数,但它仅适用于 Visual Studio 而不适用于 DAVE IDE(基于 Eclipse)。我还测试了以下代码,但完全没有成功(它识别出很多垃圾,没有什么类似于我想要的东西)。

代码的注释部分是我所做的其他测试,但这些测试都不起作用。而我之所以使用 f_read() 是因为我只能使用这个库:http ://elm-chan.org/fsw/ff/00index_e.html

“cut”字符串的示例如下:

在第 11 个元素之后没有任何内容,但这不是重点,因为这只是一个示例,并且 .csv 文件中的某些行有更多数字(但它们具有相同的 3 个变量)。

提前致谢。

编辑:问题解决了!似乎 DAVE IDE 不喜欢包含带有包含的标题。我不得不在 main.c 的开头写#include。

0 投票
1 回答
76 浏览

c - C - strtod 似乎添加了数字

我的问题strtod()似乎添加了一些数字。我正在阅读

从文件跳过整数后,2我得到以下输出

这是我的代码

0 投票
2 回答
114 浏览

c - C - 从字符串中提取所有数字

我通过读取一个在线的文件得到了一个字符串。C 是数字之间的分隔符。

现在我想提取所有这些数字并将它们写入一个称为 Matrix 的双精度数组。