Pau*_*des 3 lisp format floating-point common-lisp
在尝试将分数舍入到9位数时,我遇到了以下情况:
? (format t "~9$" 763700091/112000148)
6.818742300
Nil
Run Code Online (Sandbox Code Playgroud)
但舍入仅精确到5位数.我预计format会自动处理这个问题; 也就是说,给定表示它所需的位数,将分数转换为双精度,但显然format不能那样工作.如果你强迫这个分数加倍,你会得到:
? (coerce 763700091/112000148 'double-float)
6.818741802019762D0
Run Code Online (Sandbox Code Playgroud)
是否有控制指令指示format在这种情况下使用双精度.或者我必须double-float在将其传递给格式化之前将其强制转换为完成此操作?
我知道format是非常复杂的,你当然可以通过调用一个外部函数来实现这一点,但我希望通过更简单的调整来实现~9$
如果arg是有理数,那么它被强制为单个浮点数然后打印.
因此,您的问题的答案是否定的,但是您可以轻松地将您所做的事情与您刚刚强制转换为双浮点的数字相结合:
(format nil "~9$" (coerce 763700091/112000148 'double-float))
; ==> "6.818741802"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |