Lisp如何以非科学计数法写入数字到文件并保留指定小数位
解决方法
问题出在直接用write-to-string转换列表,它会保留Lisp双精度浮点数的原始格式(带d0后缀)。你需要手动格式化每个数字,再拼接成目标格式的字符串,用format函数就能实现:
修改你的循环部分代码:
(dotimes (nn vertexcount) (setq line (elt sphereverticeslist nn)) ;; 替换原write-to-string,手动格式化每个元素为3位小数 (setq line (format nil "(~{~,3f~^ ~})" line)) (write-line line file) ;; 简化原dolist写法,直接写入逗号 (write-line "," file))
格式说明
format nil "(~{~,3f~^ ~})"是核心:~{}:遍历列表中的每个元素~,3f:将每个浮点数格式化为3位小数的常规十进制形式,自动去掉d0后缀,极小值(比如6.123e-17)会被转为0.000~^:元素之间用空格分隔,最后一个元素后不额外加空格- 整体包裹在
()中,刚好符合你要的输出格式
效果验证
原输出的(-0.5000000000000003d0 6.12323399573677d-17 -0.8660254037844385d0),会被转换为:
(-0.500 0.000 -0.866)
内容的提问来源于stack exchange,提问作者nadirkazan
相关产品推荐
相关产品推荐

