问题标签 [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.
c - C - strtod() 不识别小数点
我有一个缓冲区,其中有“随机”数字,用逗号分隔。例如 :
“1589.3,12478.359,485.39971”等
我需要检查小数部分和整数部分的长度。
我做了一些研究,我决定在我的缓冲区上使用 strtod() 以获得一个数字。
但是,它没有按预期工作。所以我尝试了一个简单的例子:
这会打印 3113,所以我做了一些研究,发现我应该使用 %f,因为它不是整数。
所以我纠正了它:
然后它打印我 0.000000
我尝试使用逗号 (,),使用普通模板 (.) 中的点和数字键盘 (.) 中的点。他们都给了我相同的结果。
我正在使用 dev c++(我无法选择,我不是工作站的管理员)。
感谢您的关注和帮助:)
c - 如何在便携式C中将很长的字符串转换为double
我想在 C 中以可移植的方式将一串很长的数字转换为双精度数。就我而言,可移植意味着它可以在 Linux 和 Windows 中工作。我的最终目标是能够将一串数字打包成一个 8 字节的 double 和 fwrite/fread 到/从二进制文件。该号码始终是无符号的。
我正在使用这个字符串来打包 4 位数的年份、2 位数的月份、2 位数的日期、4 位数的 HH:MM、1 位数的变量和 10 位数的值。因此,尝试将 23 个字节打包成 8 个字节。
我已经尝试了所有标准的东西:
这些都不起作用;他们都将最后几个数字四舍五入。任何便携的方式来做到这一点?
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?
c - 从 csv 读取,strtod 无法读取带数字的字符串
当我阅读以下文件时
我的代码无法读取值列。我使用strtod
但结果是:
并且值始终为 0。我该如何解决这个问题?这里的代码:
java - Java 编译器的文本到浮点值转换是否与 strtod 不同?
Java 语言规范第 3.10.2 点声明浮点值按照 IEEE 754 标准中的规定进行转换。对于strtod
,C 标准指定函数如何将文本转换为浮点值。关于表示本身,两者似乎涵盖了相同的情况。我不确定的是,四舍五入规则如何?Java 编译器的转换是否与实际转换不同strtod
?
背景是我想编译为 Java 字节码代码,因此需要将浮点/双精度值的文本表示转换为类文件中的表示。
例如,这个 Java 代码打印一个更精确的值:
使用 strtod 转换相同的值并将其打印出来会打印出不太精确的值:
这是输出问题,还是实际以不同方式转换的值?
编辑:正如 Pascal Cuoq 评论的那样,当以全精度打印出值时(我通过 settings 这样做std::cout.precision()
),值是相等的,所以我假设转换导致相同的值。我想我会为此做一个测试。:-)
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()
再次精确,res3
0.5也是如此
请注意,某些十进制数无法精确表示。但有些数字可以,例如 2.5、0.5 和 0.375,但在上面的示例中它们都会出现舍入误差。
很奇怪,不是吗?
我做错了什么,还是这是 Visual Studio 标准库中的错误?
c - 将 char * 转换为 double,而不会丢失 c 中的精度
我需要帮助。我必须在不丢失精度的情况下将 char * 转换并存储为 double 或 long double 。
事实上,我尝试使用strtold和atof方法(也是strtold),但这些方法正在四舍五入该值。
例如:
打印:39.751971
但printf("%6.7f",ld)
给了我正确的值,但我无法存储到变量中。
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。
c - C - strtod 似乎添加了数字
我的问题strtod()
似乎添加了一些数字。我正在阅读
从文件跳过整数后,2
我得到以下输出
这是我的代码
c - C - 从字符串中提取所有数字
我通过读取一个在线的文件得到了一个字符串。C 是数字之间的分隔符。
现在我想提取所有这些数字并将它们写入一个称为 Matrix 的双精度数组。