问题标签 [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 - 获取字符串并转换为双精度
我正在尝试创建一个函数,该函数可以确定输入是否可以完美地转换为双精度,然后能够将其存储到双精度数组中。例如,“12.3a”的输入无效。据我所知,strtod 仍然可以将其转换为 12.3,其余的将存储到指针中。在我的函数 doubleable 中,它过滤输入字符串是否仅包含数字。但是,我知道 double 有“。” 就像在“12.3”中一样,我的函数将返回“X”(无效)。
我正在考虑检查“。”的出现。在输入中,以及输入多少(对于像 12.3.12 这样的输入,可以认为是无效的)。我在正确的轨道上吗?还是有更简单的方法来解决这个问题?我还阅读了有关 strtok 函数的信息,这对这里有帮助吗?不过,这个功能对我来说仍然很模糊。
编辑:
谢谢你!它工作得很好!我有一个后续问题。如果我输入的字符串太长,程序就会中断。如果我要将输入限制在 input[] 中最多 9 个字符,我该怎么做?
根据我对 fgets(xx, size, stdin) 的了解,它最多只能获取 size 个字符(包括 \n,\0),然后将其存储到 xx。在我的程序中,我认为如果将其设置为 10,则不会考虑超过 10 的任何内容。但是,如果我输入的字符串太长,我的程序就会中断。
c++ - 使用 std::strtod 后发生奇怪的事情
这是一个小的 lambda 函数,我在词法分析器的代码中用作辅助函数:
这里有一点背景:Token
是一个具有value
typevoid
属性line
、 typeint
属性type
和自定义 enum属性的类token_type
。在第一行中,我初始化了一个新的传递给它的构造函数的值的空指针(因为我们仍然必须创建它),枚举的值token_type
(number
因为这个令牌属于那种类型),以及我们捕获的当前行在拉姆达。
i
是一个指向const char*
我们正在检查的当前字符的类型的指针。当我们调用这个 lambda 函数时,保证它会指向一个可打印的字符。
printf
s 用于调试目的;
所以我想做的是:创建一个新Token
的内部类型number
;询问strtod
我们是否可以从当前位置建立一个数字;然后检查是否strtod
返回了一个非零值,在这种情况下,我们将该值存储在 newToken
中,将我们指向的字符的位置提前到数字后面的字符,然后返回Token
.
如果strtod
返回一个零值,我们必须仔细检查该零是否是因为找到了实际的 0,或者是否无法构建数字。所以我们检查指向数字后面的字符的指针是否指向与当前位置相同的字符:如果它是真的,则意味着strtok
没有推进该指针,这意味着根本没有找到数字(我们删除分配的值并返回一个空指针来发出信号)。否则,这意味着找到了一个 0,因此我们将其存储、前进并返回。
问题是,我每次尝试尊重时都会收到 Segfault 错误after_number
:也就是说,如果我调用buildnumber
wheni
指向一个类似 的字符串"111"
,我会在它打印后得到一个 segfault "Advancing position"
。如果我在i
指向类似"+0.0"
or的字符串时调用它"abc()"
,则在打印后会出现段错误"Value was 0, comparing position to after number"
。
为什么?指向的指针会发生什么after_number
?我究竟做错了什么?
c - 警告:“赋值从指针目标类型中丢弃 'const' 限定符”
我做了我自己的strtod()
功能。
我可以printf
在控制台中,但它在运行时会发出这样的警告:
myStrTod.c|29|警告:“赋值从指针目标类型中丢弃 'const' 限定符”|
c - 为什么带有 DBL_MIN 的 strtod() 会给出 ERANGE?
该程序在第一个命令行参数上调用 strtod() 并打印返回值:
当我在 SUSE Linux Enterprise Server 11 SP2 或 Linux Mint 17 Qiana 上运行它时,参数为2.22507385850720138309e-308
,对应于最小的可表示1双精度值 (DBL_MIN),它给出了我期望的输出:
但是,在具有相同参数2的 SUSE Linux Enterprise Server 11 SP3 上,errno 设置为 ERANGE:
第二种行为是否有效,如果是,为什么?
脚注:
由于 DBL_MIN 是可表示的,我认为这个问题与“将 C 字符串转换为 / 从双精度数转换时的奇怪行为”不同,其中转换的值已下溢。
在 SUSE 上,如果我使用参数运行程序,
2.22507385850720138310e-308
则 errno 设置为 0。(如果我使用参数运行程序,0x1p-1022
则 errno 也设置为 0。)
c++ - 在循环中使用 strtof 来解析 char 缓冲区中的数字
我有一个关于分配和释放内存的问题。
我想在循环中读取一个char缓冲区并将浮点值保存到一个向量中。我通过读取 fstream 来获取缓冲区。
但是我的方法在最后删除缓冲区时总是崩溃。
我在循环期间更改缓冲区是否有问题?有人知道如何解决这个问题吗?
我感谢每一个提示!
swift - strtod 使用经典格式?
现在功能strtod
和strtol
支持解析hex
数字格式,infinity
和NaN
其他非标准格式。
但是如何仅使用经典格式将字符串转换为数字:
123
, 1.23
, 0.123
, -123
, 1.23e10
, 1.23e-10
?
不是:+123
, .123
, 0xabcd
,0123
等等?
c - strtod 无法识别 inf
我有以下代码:
的值input
来自strtok()
并被传递到check_for_non_number
函数中......
问题是当 strtok 从文本文件中读取“inf”时,我的函数返回 1,暗示第一个参数为真……为清楚起见,文本文件中的“inf”位于文本行的中间文件,因此在它之前和之后都有文本,并且在它之前和之后都使用了 strtok。
如果有人能阐明为什么strtod()
不将“inf”作为输入来处理,将不胜感激!
python - Is there a Python equivalent to the endptr parameter to C's strtod?
I am trying to write a function that splits a string containing a floating-point number and some units. The string may or may not have spaces between the number and the units.
In C, the function strtod
has a very handy parameter, named endptr
that allows you to parse-out the initial part of a string, and get a pointer to the remainder. Since this is exactly what I need for this scenario, I was wondering if there is a similar functionality buried somewhere in Python.
Since float
itself does not currently offer this functionality, I am using a regex solution based on https://stackoverflow.com/a/4703508/2988730:
This is not completely adequate for two reasons. The first is that it reinvents the wheel. The second is that it is not properly locale-aware without adding additional complexity (which is why I don't want to reinvent the wheel in the first place).
For the record, the tail of the string can not contain any characters that a number would contain. The only real issue is that I am not requiring units to be separated from numbers by a space, so doing a simple string.split(maxsplit=1)
won't work.
Is there a better way to get a floating point number out of the beginning of the string, so I can process the rest as something else?
c - 如何处理strtod中的失败值?
我有一些代码由一个方程式组成,该方程式应该从双变量中减去多维字符串数组中的特定值,然后立即将其写回双变量中。这是一个单项目,我尝试在这里寻找导致我 strtod() 的解决方案,但它似乎不起作用。
double einwurf;
用户只能为 einwurf 输入大于 10 的正值(此部分有效)
大批
char *getraenkeListe[3][2]={"Wasser", "1.20", "Cola", "1.50", "Kaffe", "1.50"};
方程是
einwurf=einwurf-strtod(getraenkeListe[getraenkeWahl-1][1], rueckgabewert=-1);
getraenkeWahl 只能是 1、2 或 3
所以 getraenkeListe[getraenkeWahl-1][1] 应该返回 1.20 或 1.50
在示例中,它声明 NULL 而不是 rueckgabewert=-1,但我认为这只是它失败时返回的值,如果这个项目中出现故障,我们应该返回一个值 -1,所以我把它换掉了
是否不可能在 strtod() 函数中重新分配变量?如何在不写新行的情况下在 rueckgabewert 中获取它,这样 strtod() 的错误值就不会丢失?
谢谢
c - strtof = strtod 后跟演员?
假设您有一个像“0.1”这样的字符串,只能近似表示为二进制浮点数,并且您希望将其转换为单精度浮点数。这可以作为
或者
直觉上,这些应该给出相同的结果,但是直觉在所有情况下都是正确的吗?或者是否存在任何极端情况,在这种情况下,第二种形式通过两次舍入,给出的结果与第一种形式略有不同?