在 Common Lisp 中,如何格式化浮点并指定分组、群聊和小数分隔符

2023-12-23

假设我有浮点数1234.9

我想将其格式化为1.234,90

是否有格式指令组合?~D,可以处理分组和群聊,仅处理整数。~F根本不处理分组。据我所知,没有人可以改变小数点. to ,

我看到的唯一解决方案是使用~D对于整数部分数字分组并将其与,和小数部分。还有更好的想法吗?


您可以定义一个用波浪线斜杠调用的函数,大多数其他答案已经完成了,但是为了获得类似于 ~F 的输出,但注入了逗号字符,并替换了小数点,我认为它是最好调用 get ~F 产生的输出,然后修改它并将其写入字符串。这是一种使用实用程序来做到这一点的方法注入逗号以指定的间隔向字符串添加逗号字符。这是指令函数:

(defun print-float (stream arg colonp atp
                    &optional
                      (point-char #\.)
                      (comma-char #\,)
                      (comma-interval 3))
  "A function for printing floating point numbers, with an interface
suitable for use with the tilde-slash FORMAT directive.  The full form
is 

    ~point-char,comma-char,comma-interval/print-float/

The point-char is used in place of the decimal point, and defaults to
#\\.  If : is specified, then the whole part of the number will be
grouped in the same manner as ~D, using COMMA-CHAR and COMMA-INTERVAL.
If @ is specified, then the sign is always printed."
  (let* ((sign (if (minusp arg) "-" (if (and atp (plusp arg)) "+" "")))
         (output (format nil "~F" arg))
         (point (position #\. output :test 'char=))
         (whole (subseq output (if (minusp arg) 1 0) point))
         (fractional (subseq output (1+ point))))
    (when colonp
      (setf whole (inject-comma whole comma-char comma-interval)))
    (format stream "~A~A~C~A"
            sign whole point-char fractional)))

这里有些例子:

(progn 
  ;; with @ (for sign) and : (for grouping)
  (format t "~','.2@:/print-float/ ~%" 12345.6789) ;=> +1.23.45,679

  ;; with no @ (no sign) and : (for grouping)
  (format t "~'.'_3:/print-float/ ~%" 12345.678)   ;=>  12_345.678

  ;; no @ (but sign, since negative) and : (for grouping)
  (format t "~'.'_3:/print-float/ ~%" -12345.678)  ;=> -12_345.678

  ;; no @ (no sign) and no : (no grouping)
  (format t "~'.'_3@/print-float/ ~%" 12345.678))  ;=> +12345.678 (no :)

以下是来自的示例coredump-的答案 https://stackoverflow.com/a/35018021/1281433,这实际上帮助我发现了负数的错误:

CL-USER> (loop for i in '(1034.34 -223.12 -10.0 10.0 14 324 1020231)
            do (format t "~','.:/print-float/~%" i))
1.034,34
-223,12
-10,0
10,0
14,0
324,0
1.020.231,0
NIL

Here's 注入逗号,举一些例子:

(defun inject-comma (string comma-char comma-interval)
  (let* ((len (length string))
         (offset (mod len comma-interval)))
    (with-output-to-string (out)
      (write-string string out :start 0 :end offset)
      (do ((i offset (+ i comma-interval)))
          ((>= i len))
        (unless (zerop i)
          (write-char comma-char out))
        (write-string string out :start i :end (+ i comma-interval))))))
(inject-comma "1234567" #\, 3)
;;=> "1,234,567"

(inject-comma "1234567" #\. 2)
;;=> "1.23.45.67"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Common Lisp 中,如何格式化浮点并指定分组、群聊和小数分隔符 的相关文章

  • 为什么函数 apply 会抱怨长列表?

    作为一些欧拉阵痛 http projecteuler net 我正在尝试编写一个埃拉托斯特尼筛法 https en wikipedia org wiki Sieve of Eratosthenes带有因式分解轮 到目前为止我的代码是 def
  • 在 LISP 中是否可以访问函数的形式?

    假设我全局定义了一个函数 defun x y 1 y Edit my first example was too complicated 是否可以将函数 x 强制 到一个列表中 例如 x y 1 y 提前致谢 PS Danlei 的示例在
  • 以列表作为参数的 defun

    我正在尝试选择 Lisp 作为我的新语言 但我在解决如何让函数的一部分作用于传递给它的列表的每个元素上时遇到了一些问题 为了学习如何解决这个问题 我试图编写一个相当基本的除法形式 当列表的一个元素为 0 时不会发出声音 而是只返回 0 de
  • MOP:访问任何插槽定义? (mito柱型)

    我定义了一个使用 Mito ORM 的类 插槽定义了一个 col type isbn accessor isbn initarg isbn col type or varchar 128 null 如何获得 col type定义 由于这是我
  • 调用另一个 lisp 文件中的函数

    我必须用 Lisp 写一个游戏 为了清楚起见 我想将代码拆分到不同的 lisp 文件中 如何从另一个文件中的函数中调用函数 例如 file1 lisp 有一个名为 function1 的函数 file2 lisp 有一个名为 functio
  • Common Lisp 整数到十六进制的转换

    是否有一个与 parse integer ff radix 16 类似的函数可以让我以另一种方式返回 如果我有 int 255 如何将其转换为字符串 ff write to string 255 base 16
  • (撰写)Common Lisp

    我们在 P Graham 的 ANSI Common Lisp 第 110 页 中找到了这个函数构建器来实现组合 参数是 n gt 0 带引号的函数名称 我不完全理解它 所以我将在这里引用代码并在下面指出我的问题 defun compose
  • Clojure let 与 Common Lisp let

    在 Common Lisp 中 let使用绑定列表 即 let var1 1 var2 2 虽然 Clojure 使用向量来代替 let a 1 b 2 除了可读性之外 Clojure 使用向量还有什么具体原因吗 您可以在以下位置找到 Ri
  • 更改列表的第 n 个元素

    我想更改列表的第 n 个元素并返回一个新列表 我想到了三个相当不优雅的解决方案 defun set nth1 list n value let list2 copy seq list setf elt list2 n value list2
  • 如何使用 common lisp 确定操作系统和主机名?

    为了让我的 sbclrc 文件在我使用的两台计算机上工作 我想要一种从 sbcl 中获取主机名和 或操作系统的方法 我知道我可以设置然后查找环境变量 但是有更直接的方法吗 Update 我将问题更改为引用 common lisp 因为 Ke
  • 如何从字符串创建关键字符号? [复制]

    这个问题在这里已经有答案了 从字符串创建符号非常简单 intern test gt test 我正在努力创造keywordplist 的符号 寻找类似的东西 XXXX test gt test 注意 intern test 不产生keywo
  • Common Lisp 案例和引用元素

    我正在用 CL 编写一个地下城爬行游戏 但在处理案例表单时遇到了问题 两件事情 Common Lisp 抱怨Duplicate keyform QUOTE in CASE statement make instance cl rogue t
  • 在 OSX 上编译 clisp-2.49:未找到 LIBFFI

    TL DR Even if libffi似乎已安装 configure即使我给它添加 正确的 前缀 脚本也找不到它 这篇文章的最后一部分 是我陷入困境的地方 我仅提供其他信息来解释我如何到达那里 我对这篇长篇文章表示歉意 如果有些内容与您无
  • CLISP - 反转简单列表

    我必须反转简单 单维 列表的元素 我知道有一个内置的反向函数 但我不能用它来做这个 这是我的尝试 defun LISTREVERSE LISTR cond lt length LISTR 2 LISTR listr is 1 atom or
  • Common Lisp 中重置状态

    新手 Common Lisp 问题在这里 有没有办法重置环境状态 我的意思是 是否有一些命令可以使 REPL 恢复到启动后的相同状态 即取消所有变量 函数等 或者如果这不在 Common Lisp 标准中 是否有一些扩展在 SBCL 我使用
  • LISP 中的变量和符号有什么区别?

    从范围上来说 内存中的实际实现 语法 例如 if let a 1 a 是变量还是符号 约尔格的回答指出了正确的方向 让我补充一点 我将讨论与 Common Lisp 类似的 Lisp 作为数据结构的符号 符号是 Lisp 中真实的数据结构
  • windows下无法用emacs + sbcl启动slime

    我想配置我的 emacs 以使用 SLIME 和 SBCL emacs 文件如下所示 add to list load path D app slime setq inferior lisp program sbcl require sli
  • Lisp 格式和强制输出

    我不明白为什么这段代码在不同的实现中表现不同 format t asdf setq var read 在 CLISP 中 它的行为与预期一致 先打印提示 然后读取 但在 SBCL 中 它显示 then输出 我在网上查了一下 修改了一下 fo
  • Common Lisp——为什么这个符号不是外部的?

    我正在尝试在 ASDF 中运行测试 如下所示 foo asd defsystem foo tests depends on foo fiveam components module tests components file main pe
  • Common Lisp 相当于 format 函数中的 \r 吗?

    基本上 我想只使用 Common Lisp 而不是 Python 来执行以下操作 print Hello world r n 我可以做到这一点 但它只输出 newline字符和跳过 return format t Hello world 我

随机推荐

  • 如何关闭InputStream和OutputStream?

    我使用以下代码来关闭与服务器的连接的 InputStream 和 OutputStream try if mInputStream null mInputStream close mInputStream null if mOutputSt
  • 用线条替换 QTextEdit 边界框

    这个问题是对边界框 https stackoverflow com questions 46911925 getting the bounding box of qtextedit selection例子 我试图了解如何绘制简单的形状 我只
  • TurnContext Respond 如何使用 Waterfalldialogs 工作?

    我的 TaskOnTurn 方法有问题 当我启动机器人时 它会发送欢迎消息并启动一个新的对话框 因为 if turnContext Responded 现在 当我在对话框中时 它会再次跳到最后一个 if 语句 并且当我已经在一个对话框中时
  • Web 应用程序中的 Gremlin Python

    我有一个 python Flask Web 应用程序 它正在使用查询 Janus 图数据库gremlin python 一个基本问题是初始化图遍历对象的正确方法 我可以初始化我的遍历吗g traversal withRemote Drive
  • 将流映射到惰性承诺流

    我有一个数字流 我必须使用承诺将它们变成一个帖子流 我想懒惰地这样做 所以如果我这样做 take 1 从帖子流中 它只会将一个数字转换为一篇帖子 这是从某个号码获取帖子的承诺 var getPost function author cons
  • 如何在Android中使用数据绑定来绑定layout_width和layout_height

    我正在尝试绑定一个布尔值 该布尔值指示 ImageView 屏幕尺寸是否很小 因此如果我需要更多空间容纳其他组件 它就会缩小 我正在使用数据绑定库 http developer android com intl pt br tools da
  • 为什么没有python pip3.7?

    我的python版本是3 70 sudo python3 版本 我使用以下命令安装了 pip3 sudo apt install python3 pip 但是当我检查 pip3 版本时 pip3 version pip 19 0 1 来自
  • Django 循环模型参考

    我开始在一个小型足球联赛管理网站上工作 主要是为了学习目的 但无法全神贯注于 Django 模型关系 为简单起见 假设我有两种类型的对象 玩家和团队 当然 一名球员属于一个球队 因此在球员模型中这是一个外键 球队 所以我去 class Te
  • 视频缩略图需要 10-15 秒才能显示

    我正在使用 DKImagePickerController 从图库中选择视频并尝试显示它的缩略图 不知道为什么 但显示图像需要 10 15 秒 任何帮助表示赞赏 这是代码 tempDkAsset fetchAVAssetWithComple
  • Gruntfile.js 中的 JavaScript 变量?

    我正在维护一个广泛使用 Grunt 的 Web 应用程序 我必须在不同时间缩小 复制我的 html css js 文件到不同位置 因此 为了简单起见 我在 GruntFile js 中创建了一个简单的 javascript 变量 如下所示
  • LINQ 性能

    针对对象集合的 LINQ 查询幕后到底发生了什么 它只是语法糖还是发生了其他事情使其成为更有效的查询 您的意思是查询表达式 还是查询在幕后的作用 查询表达式首先扩展为 普通 C 例如 var query from x in source w
  • IOS 中的 WebRTC 视频和音频不支持 3G /4G,但支持 WIFI

    我尝试在 iOS 中通过 3g 4g 连接 WebRTC 视频和音频时出现错误 但在 WiFi 网络下工作正常 找到对等连接后出现错误 carc CAReportingClient mm 320 CAReportingClient send
  • 在 HTML 元素上分配多种样式

    我刚刚开始使用 HTML 但在为文本分配多种样式时遇到了麻烦 我想创建一个具有两个属性的标题 Centered 字体 Tahoma 我已经尝试过这个 h2 style text align center TITLE h2 但它不起作用 我究
  • 将离屏 WebView 绘制为位图

    我试图在 android 中捕获从屏幕上绘制的 webview 图像给用户 但我总是得到黑色图像 这是正确的尺寸 但一切都不是 这是我正在使用的代码 String theURL file android asset www pages pa
  • Matplotlib:子图的高度相同

    在下面的示例中 如何将两个子图设置为相同的高度 minimal example import matplotlib pyplot as plt import numpy as np f ax1 ax2 plt subplots 1 2 im
  • 即使文件存在,如何修复 QFile 打开错误(未知错误)?

    我正在尝试打开并阅读map dat文件使用QFile接口 但它不会打开该文件 即使它确实存在于目录中 我努力了fopen ifstream在 C 中 但他们一直告诉我该文件不存在 即使我已将其添加到资源文件夹中 qrc 然后我转向QFile
  • jquery图像幻灯片随机显示图像

    我正在使用链接中的幻灯片放映 http www alohatechsupport net webdesignmaui maui web site design easy jquery auto image rotator http www
  • 如何确定 seq2seq 张量流 RNN 训练模型的最大批量大小

    目前 我使用默认的 64 作为 seq2seq 张量流模型的批量大小 最大批量大小 层大小等是多少 我可以使用具有 12 GB RAM 的单个 Titan X GPU 和 Haswell E xeon 128GB RAM 输入数据被转换为嵌
  • 有什么方法可以将 Xcode 3 与 iOS SDK 4.3 一起使用吗?

    我正在使用 Xcode 4 和 iOS 4 3 Xcode 4 有很多 bug 更不用说很多东西都改变了 最让我烦恼的是热键 我什至找不到一种方法来以合适的组合自定义它们 我很想使用 Xcode 3 因为它很稳定并且可以满足我的需要 是否可
  • 在 Common Lisp 中,如何格式化浮点并指定分组、群聊和小数分隔符

    假设我有浮点数1234 9 我想将其格式化为1 234 90 是否有格式指令组合 D 可以处理分组和群聊 仅处理整数 F根本不处理分组 据我所知 没有人可以改变小数点 to 我看到的唯一解决方案是使用 D对于整数部分数字分组并将其与 和小数