首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
《仓颉编程基础及应用》扩展阅读:用 std.convert 的 format 函数掌握仓颉字符串的复杂格式化
📅 2026/10/14 17:04:51
✍️ 爱科研究院
👁 阅读 3,247
示例工程教程【免费下载链接】仓颉编程基础及应用_陈波_何睿_重庆大学《仓颉编程基础及应用》清华大学出版社2025年9月第1版 1. 随书源代码 2. PPT; 3.在线扩展阅读资料。项目地址https://gitcode.com/Cangjie-SIG/Cangjie_Basics_Application点击查看免费下载将一个数值对象转换成指定样式的字符串规定宽度、对齐、精度、进制、符号前缀等是控制台输出与数据展示中高频出现的需求。本文基于《仓颉编程基础及应用》随书源码仓库中的扩展阅读文档系统讲解仓颉std.convert包为Float32、Float64、Int32、Int64、UInt32、UInt64等类型扩展提供的format成员函数完整拆解fmt格式串的[flags][width][.precision][specifier]四段式语法并给出仓库中可直接编译运行的 9 个配套示例工程帮助读者掌握仓颉中宽度补齐、左右对齐、零填充、进制转换与科学计数法等格式化实战技能。1. 格式化概念与 format 成员函数将一个对象转换成对应的字符串对象的过程称之为格式化format。在仓颉中std.convert包为Float32、Float64、Int32、Int64、UInt32、UInt64等类型扩展实现了format成员函数。在导入std.convert包后再执行这些对象的format成员函数即可将对象“转换”成对应的字符串表达形式。上述format成员函数的签名为format(fmt: String): String其fmt参数是一个字符串类型的参数用于指定转换格式。理解这个函数有两点需要注意它是扩展成员函数format并不是这些数值类型自带的成员导入std.convert之后Int32、Float64等对象才“拥有”该成员函数这体现了仓颉通过包导入引入扩展能力的语言机制它不修改原对象pi.format(x)只是根据pi的值以及格式串x的要求生成并返回一个新的字符串对象原数值对象在函数执行前后类型和值都保持不变。2. 简单格式化示例下述示例对应仓库工程 BookSourceCode/CH2/StrFormat将浮点数对象pi按指定格式转换成字符串并打印至屏幕package StrFormat import std.convert //导入std标准库下的format包 main(): Int64 { let pi:Float64 3.141592653589793238462643383279 let s1 pi.format(.4); let s2 pi.format(20.10) println(s1); print(s2) //s1, s2均为String类型 return 0 }上述代码的执行结果为3.1416 3.1415926536逐行解析第 2 行导入std标准模块下的convert格式化包。程序第 6 行所使用的格式化函数是由该包定义的第 5 行定义圆周率不可变变量pi为尽可能提高存储精度这里使用了Float64类型第 6 行在导入了std.convert之后pi作为Float64类型的对象便拥有了成员函数format第 7 行将格式化结果字符串s1和s2通过println和print函数打印至屏幕。结合执行结果观察pi.format(.4)将pi格式化生成了将pi保留 4 位小数的字符串3.1416。format函数的参数.4为一个字符串字面量它表明转换格式为“保留 4 位小数”。不难看出3.1415926… 在格式化保留 4 位小数的过程中被四舍五入变成了 3.1416pi.format(20.10)将pi格式化为显示正负号、总宽度 20 个字符、保留 10 位小数、右对齐的字符串不足部分使用空格补齐即执行结果第 2 行中3.1415926536左侧的若干空格。3. 格式化参数 fmt 的语法格式根据仓颉文档format(fmt: String): String函数的fmt参数用于指定格式化参数这些参数用于规定转换结果的宽度、对齐方式、精度等信息。格式化参数fmt的语法格式为[flags][width][.precision][specifier]其中方括号表示这些字段为可选即格式化参数并不需要完整包含上述 4 个字段。四个字段的位置是固定的标志位在前、宽度次之、精度以.引导再次之、进制/记数 specifier 在最后。后文分别对四类字段逐一展开。4. flags 标志位flags字段可以包含-、、#、0四个字符中的 1 个或多个。4.1 -左对齐-适用于Int、UInt、Float等类型表示左对齐。对应示例工程 BookSourceCode/CH2/Alignmentpackage Alignment import std.convert main(): Int64 { var c:Int32 -17 let s1 c.format(-20) //20个字符左对齐 println(s1) let s2 c.format(20) //20个字符默认右对齐 print(s2) return 0 }执行结果为-17 -17解析第 6 行格式化参数-20中的-属于flags字段表示转换结果应为左对齐20则属于width字段表示结果字符串应包含 20 个字符不足部分用空格补齐因此第一行的-17后补了 17 个空格第 9 行格式化参数未要求左对齐默认右对齐。如执行结果第 2 行所见format成员函数通过在左侧补充空格的方式满足 20 的宽度要求。4.2 正值输出加号适用于Int、UInt、Float表示对正数输出号。对应示例工程 BookSourceCode/CH2/Pluspackage Plus import std.convert main(): Int64 { var v1:Float32 7.1287 let s1 v1.format() //给正值使用结果中会出现号 println(s1) var v2:Float32 -7.1287 let s2 v2.format() //给负值使用 print(s2) return 0 }执行结果为7.128700 -7.128700可见正数结果被加上号前缀如执行结果第 2 行所见当给负值使用时于转换结果不构成影响负号-本就存在。4.3 #为转换结果添加进制符号#为转换结果添加进制符号。具体地为二进制结果补充0b或者0B为 16 进制结果补充0x或者0X为 8 进制结果补充0o或者0O。当输出结果为 10 进制时不起作用。该符号预期与specifier中的进制符号x、b等联合使用。对应示例工程 BookSourceCode/CH2/Sharppackage Sharp import std.convert main(): Int64 { var v 125 println(v.format(#x)) println(v.format(x)) //x为specifier意为16进制 println(v.format(#B)) println(v.format(B)) //B为specifier意为2进制 //未指定进制即为10进制#号不起作用 print(v.format(#)) return 0 }执行结果为0x7d //x导致了7d, #号附加了0x 7d //没有#号就没有0x 0B1111101 //B导致2进制结果#号附加了0B 1111101 //没有#号就没有0B 125 //对于10进制#号不起作用4.4 0空位补零0适用于Int、UInt和Float用于在空位补0。对应示例工程 BookSourceCode/CH2/ZeroLeadingpackage ZeroLeading import std.convert main(): Int64 { var v 72.6386654 println(v.format(020)) //20个字符不足前端补0 print(v.format(20)) //20个字符不足前端补空格 return 0 }执行结果为0000000000072.638665 72.638665可以看出宽度不足的补位默认使用空格加上0标志后则改为补0常用于生成固定位宽的时间戳、编号等展示。5. width 宽度v.format(20)中的20即为宽度。宽度应为正整数适用于Int、UInt、Float等类型。宽度前有-表示左对齐否则右对齐。对应示例工程 BookSourceCode/CH2/Widthpackage Width import std.convert main(): Int64 { var v 123456 println(v.format(20)) //自身占6个字符前方补了14个空格 print(v.format(20)) //连同号占7个字符前方补了13个空格 return 0 }执行结果为123456 123456两点值得注意宽度指的是整个结果字符串的总字符数而非数值本身占用的位数当同时使用标志时符号也计入总宽度——123456连同号占 7 个字符故前方只补了 13 个空格。6. precision 精度精度常用于指定浮点数小数点后的数字位数如果不指定则默认输出 6 位小数第 2 节示例中Float32输出7.128700即为默认 6 位小数的体现。对应示例工程 BookSourceCode/CH2/Precisionpackage Precision import std.convert main(): Int64 { var v:Float64 12345.678987654321 println(v.format(.3)) //3位小数四舍五入 println(v.format(.5)) //5位小数四舍五入 print(v.format(.0)) //0位小数四舍五入 return 0 }执行结果为12345.679 12345.67899 12346可以看到精度截断时按四舍五入处理.3使12345.6789…进位为12345.679.0表示不保留小数结果直接进位为整数12346。7. specifier 进制与记数方式7.1 b、B、o、O、x、X指定进制Int 与 UIntb、B、o、O、x、X用于指定进制适用于Int和UInt类型b为小写 2 进制、B为大写 2 进制o为小写 8 进制、O为大写 8 进制x为小写 16 进制、X为大写 16 进制未指定时默认 10 进制。如前所述上述进制符号可与flags中的#号配合使用。对应示例工程 BookSourceCode/CH2/Basepackage Base import std.convert main(): Int64 { var v 4571 println(v.format(b)) println(v.format(B)) println(v.format(o)) println(v.format(O)) println(v.format(x)) print(v.format(X)) return 0 }执行结果为1000111011011 1000111011011 10733 10733 11db 11DB其中大小写 specifier 的差异主要体现在 16 进制的数字字母上x输出11dbX输出11DB2 进制与 8 进制本身只含数字大小写结果相同。7.2 e、E、g、G科学计数法与自适应记数Floate、E、g、G适用于Float类型e表示小写的科学计数法E表示大写的科学计数法g或G源于 general常规表示让仓颉在科学计数法和普通 10 进制计数法中自动选择较为恰当的表达方式。对应示例工程 BookSourceCode/CH2/Scientificpackage Scientific import std.convert main(): Int64 { var a 1234.5678987654321 println(a.format(e)) println(a.format(.3E)) println(a.format(g)) //自适应常规10进制 var b 228989289.1234234 print(b.format(.2G)) //自适应科学计数法 return 0 }执行结果为1.234568e03 //e 1.235E03 //E 1234.57 //g 2.3E08 //.2G从结果可以看出g/G的“自适应”行为当数值较适中时1234.5678…选择常规 10 进制记数并截断为1234.57当数值量级较大时228989289.1234…则自动切换为科学计数法2.3E08避免了普通记数方式下过长的数字串。8. 格式化参数速查表将全文内容汇总为速查表便于日常编码时对照使用字段位置可选取值适用类型作用flags最前-、、#、0可组合-//0适用 Int、UInt、Float#配合进制 specifier-左对齐正值加号#添加0x/0b/0o等进制前缀0空位补零widthflags 之后正整数Int、UInt、Float结果总宽度不足时补空格或按0标志补零无-时默认右对齐.precisionwidth 之后以.引导的非负整数Float小数点后位数默认 6 位超出四舍五入specifier最后b/B、o/O、x/Xe/E、g/G前者用于 Int、UInt后者用于 Float指定进制或科学计数法/自适应记数方式缺省为 10 进制四个字段均为可选可自由组合例如第 2 节中的20.10即为flags() width(20) .precision(10)的组合。9. 随书源码工程的验证方式文中所有示例均来自《仓颉编程基础及应用》随书源码目录 BookSourceCode/CH2每个示例是独立的 cjpm 工程含 cjpm.toml 与src/main.cj。从工程配置 BookSourceCode/CH2/StrFormat/cjpm.toml 看output-type为executable、cjc-version为0.57.3仓库 README.md 说明源码整体按照仓颉 LTS 1.0.0 标准编写。因此适用前提是本地安装兼容的仓颉工具链cjc/cjpm后在任一示例工程目录下如BookSourceCode/CH2/StrFormat使用 cjpm 构建并运行即可复现本文各节的执行结果。与format主题相关但属于不同技术面的扩展阅读可参考同目录下的 使用 format-hex 以 16 进制格式查看文件内容该文档讨论的是 Windows PowerShell 的format-hex命令与本文的std.convert格式化函数并非同一技术以及 仓颉位运算相关示例——理解了format的进制输出后位运算结果用format(b)、format(x)展示会十分直观。10. 小结std.convert包通过扩展机制为整数与浮点类型提供format(fmt: String): String成员函数将数值对象按指定样式转换为String且不改变原对象格式串语法为[flags][width][.precision][specifier]四段均为可选flags-左对齐、正值加号、#进制前缀、0补零控制标志width控制总宽度与补齐.precision控制小数位数specifier控制进制b/B/o/O/x/X或浮点记数方式e/E/g/G随书源码 BookSourceCode/CH2 下 StrFormat、Alignment、Plus、Sharp、ZeroLeading、Width、Precision、Base、Scientific 共 9 个工程与本文示例一一对应可直接编译运行验证各格式化参数的实际效果。赞分享示例工程教程【免费下载链接】仓颉编程基础及应用_陈波_何睿_重庆大学《仓颉编程基础及应用》清华大学出版社2025年9月第1版 1. 随书源代码 2. PPT; 3.在线扩展阅读资料。项目地址https://gitcode.com/Cangjie-SIG/Cangjie_Basics_Application点击查看免费下载相关推荐仓颉编程基础及应用入门教程2初学者必会的10个数据类型与字符串格式化技巧仓颉编程基础及应用入门教程2初学者必会的10个数据类型与字符串格式化技巧 《仓颉编程基础及应用》入门教程2面向初学者和普通用户聚焦仓颉编程中最常用的数据类型示例工程教程DLSS Swapper 完整指南免费给游戏换 DLSS、FSR、XeSS 版本还能一键还原DLSS Swapper 完整指南免费给游戏换 DLSS、FSR、XeSS 版本还能一键还原 DLSS Swapper 是一款免费开源的 Windows 工具桌面应用大麦自动抢票脚本把选座下单交给配置驱动大麦自动抢票脚本把选座下单交给配置驱动 开票瞬间手动点击往往慢半拍页面先弹出缺货登记票就没了。ticket purchase 把选城市、挑票价、勾观演人、GUI 自动化RPA创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/10/14 17:04:51
ESP32舵机控制全解析:从PWM原理到多路同步与远程控制
2026/10/14 16:59:50
【商标视点】商标命名和商标通过率的实务分析与启示(二)
2026/10/14 16:59:50
C语言接口与实现源码解析:模块化设计与工程实践
2026/10/14 19:00:45
俄罗斯诚信码批量采集设备选型:Data Matrix 扫码识别技术方案解析摘要
2026/10/14 19:00:45
FPGA上FFT的Verilog实现:蝶形运算与定点设计全解析
2026/10/14 19:00:45
PTC液体加热器选型指南:5种结构类型、4种外壳材质与功率衰减控制
2026/10/14 19:00:45
Python分支结构全解析:if/elif/else语法与实战避坑指南
2026/10/14 19:00:45
DeepSeek表格复制变形?三招干净落进Excel/CSV/SQL
2026/10/14 18:55:45
MATLAB有限元代码编译为独立EXE的完整实践指南
2026/10/14 0:02:01
Oracle 19c Windows客户端安装配置与连接排错指南
2026/10/14 0:02:01
React Native截图优化:解决Android兼容性问题
2026/10/14 0:02:01
金属锈蚀速率计算模型与防护方案优化实践
2026/10/13 12:25:09
流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南
2026/10/14 18:35:19
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别
2026/10/14 14:52:59
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容
2026/10/12 19:53:23
我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
2026/10/11 21:41:11
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026/10/11 23:43:10
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)