Fortran - 整数长度/使用的位数

4
这可能是一个非常基本的问题,但我似乎无法在谷歌上找到答案,也不能通过搜索这个论坛来找到答案(最可能是由于问题的措辞不好)。
我正在寻找一个内部的Fortran函数,以给出整数使用的位置数量。我的意思是,如果一个整数是12543,则使用的位置数为5(它将始终为正数)。我想要这个的原因是,在使用带格式输出的WRITE语句时,我可以指定"Iw"中的"w",并使用尽可能少的空格。
更具体地说:
WRITE(*,"(/ A,Iw,1X,A,Iw)") "All particles within radius ",radius, "of particle index number", p_o_i

在此之前,用户已经指定了半径p_o_i

我可以很容易地编写一些代码来实现这一点,但我认为一定有一个内置函数可以实现这个功能。

我已经查看了这里的函数,但没有什么进展。感谢您的帮助。


你是在寻找Fortran中的特定函数,还是想自己实现它?(非常容易实现) - matan7890
4
可以使用log10函数,或者将内容写入一个字符串变量中,指定固定的宽度,然后通过adjustltrim函数打印该字符串。 - steabert
7
可以使用I0G0编辑描述符。通常这会导致最小的字段。 - francescalus
1
感谢回复。我之前打算做的是将整数复制到一个临时变量中,然后不断地将临时变量除以10,直到小于1为止,同时增加计数器。不过我想可能有一些特定的内置函数可以实现这个功能! - 1QuickQuestion
4
按照 @francescalus 的建议去做,Fortran 提供了 i0 编辑描述符,用于整数字段,在运行时将确保打印整数的精确宽度。当打印整数时,你绝对不需要通过对数计算出允许的字符数。 - High Performance Mark
显示剩余3条评论
1个回答

2
感谢回复!我承认这个问题有误导性,因为它明确请求一种内在的Fortran函数来提供整数使用的位置数,而这并不是第一位所要求的。此外,普遍共识似乎是这种函数不存在。
francescalusHigh Performance Mark建议的那样,为了确保整数使用最小的间隔,应该使用"I0"编辑描述。因此,对于前面的示例,这将是:
WRITE(*,"(/ 1X, A, I0, A, I0)") "All particles within radius ",radius, " of particle index number ", p_o_i

如果您实际上需要找到整数中的“字符”数量(出于某种其他原因),最好的建议是使用steabert建议的log10函数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接