首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GForth:将浮点数转换为字符串

GForth:将浮点数转换为字符串
EN

Stack Overflow用户
提问于 2018-12-05 23:47:53
回答 2查看 355关注 0票数 5

一个简单的问题被证明是相当复杂的:

如何在GForth中将浮点数转换为字符串?所需的行为如下所示:

代码语言:javascript
复制
1.2345e fToString \ takes 1.2345e from the float stack and pushes (addr n) onto the data stack
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-06 12:43:34

经过大量的挖掘,我的一个同事发现了它:

f>str-rdp ( rf +nr +nd +np -- c-addr nr ) https://www.complang.tuwien.ac.at/forth/gforth/Docs-html-history/0.6.2/Formatted-numeric-output.html 将rf转换为c-addr nr处的字符串.nr + np的转换规则和意义与f.rdp相同。

来自f.rdp

f.rdp ( rf +nr +nd +np -) https://www.complang.tuwien.ac.at/forth/gforth/Docs-html/Simple-numeric-output.html 打印浮点射频格式化。输出的总宽度为nr。对于不动点表示法,小数点后的数字数为+nd,有效位数的最小数为np。设置精度对f.rdp没有影响.如果siginicant数字的数目至少为np,如果小数点之前的数字数符合,则使用不动点表示法。如果不使用定点表示法,则使用指数表示法,如果不符合,则打印星号.我们建议使用nr>=7来避免数字不合适的风险。我们建议nr>=np+5避免f.rdp切换为指数表示法的情况,因为不动点表示法的有效位数太少,而指数表示法提供的有效位数却较少。我们推荐nr>=nd+2,如果您想对某些数字使用定点表示法.如果您希望对所有数字都使用指数表示法,我们建议使用np>nr。

用人类可读的术语来说,这些函数需要浮动堆栈上的数字和数据堆栈上的三个数字。

第一个数字参数告诉它字符串应该有多长,第二个参数告诉它你想要多少小数,第三个参数告诉它最小的小数数(大致上是精确的)。为了确定最终产生的字符串格式,需要执行大量的隐式数学,因此几乎需要进行一些修改才能使其符合您的要求。

测试它(我们不想重新构建f.,而是生成一种格式,它将被接受为浮点数,再次被EVALUATE接受,因此1.2345E0表示法是有意的):

代码语言:javascript
复制
PI 18 17 17 f>str-rdp type \ 3.14159265358979E0 ok
PI 18 17 17 f.rdp          \ 3.14159265358979E0 ok
PI f.                      \ 3.14159265358979  ok
票数 5
EN

Stack Overflow用户

发布于 2018-12-06 06:56:54

我找不到确切的词来形容这个词,所以我查了一下Gforth的资料来源。

显然,您可以使用represent word将最重要的数字打印到提供的缓冲区中,但这并不是最终的输出。represent返回有效性和符号标志,以及小数点的位置。然后,该词用于浮点打印单词的所有变体中(f.fp. fe.)。

最简单的方法可能是用word代替emit (emit是一个延迟的单词),在需要时保存数据,使用可用的浮动品脱打印单词之一,然后将emit恢复到原始值。

我也想听听你喜欢的解决方案.

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53642533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档