You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 09:32:14