gpt4 book ai didi

string - 格式化 float 而不在小数点后打印零

转载 作者:太空宇宙 更新时间:2023-11-03 18:40:29 25 4
gpt4 key购买 nike

我想以美观的方式打印 float 。具体来说,我想在小数点后打印两个数字,但前提是这些数字不为零。

如果数字不是偶数,这有效:

(let ((f 1.240))
(format t "~,2F" f))

--> 1.24

但如果数字是整数,我会得到:

(let ((f 1240))
(format t "~,2F" f))

-->1240.00

是否有一些优雅的方法可以做到这一点,或者我是否必须在打印之前手动检查小数点数?

最佳答案

我认为标准格式指令不可能做到这一点。您可以编写自定义格式函数:

(defun my-f (stream arg &optional colon at digits)
(declare (ignore colon at))
(prin1 (cond ((= (round arg) arg) (round arg))
(digits (float (/ (round (* arg (expt 10 digits)))
(expt 10 digits))))
(t arg))
stream))

然后像这样使用它:

CL-USER> (format t "~/my-f/" 1)
1
NIL
CL-USER> (format t "~/my-f/" 1.0)
1
NIL
CL-USER> (format t "~/my-f/" pi)
3.141592653589793D0
NIL
CL-USER> (format t "~/my-f/" 1.5)
1.5
NIL
CL-USER> (format t "~2/my-f/" 1)
1
NIL
CL-USER> (format t "~2/my-f/" 1.0)
1
NIL
CL-USER> (format t "~2/my-f/" pi)
3.14
NIL
CL-USER> (format t "~2/my-f/" 1.5)
1.5
NIL

关于string - 格式化 float 而不在小数点后打印零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8334319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com