std.format 包
功能介绍
format 包提供格式化能力,主要为将仓颉类型实例转换为格式化字符串。
本包定义了接口 Formatter,用于规定统一的格式化方法,并为 Rune、Int8 等一系列仓颉类型实现了该接口,用户也可以自行为其他类型实现该接口以获取格式化功能。
将仓颉类型转换为字符串时,可根据格式化参数规定字符串格式,如宽度、对齐方式等。(在 Formatter 接口定义的方法中,格式化参数将作为函数入参)。
格式化参数的详细语法说明如下:
format_spec := [flags][width][.precision][specifier]
flags := '-' | '+' | '#' | '0'
width := integer
precision := integer
specifier := 'b' | 'B' | 'o' | 'O' | 'x' | 'X' | 'e' | 'E' | 'g' | 'G'
参数 flags:
-
'-' 适用于 Int,UInt,Rune 和 Float,表示左对齐。
代码如下:
import std.format.* main() { var c : Int32 = -20 print("\"${c.format("-10")}\"") }
运行结果如下:
"-20 "
-
'+' 适用于 Int,UInt 和 Float,如果数值为正数则打出 '+' 符号,如果数值为负数则忽略。
代码如下:
import std.format.* main() { var c: Int32 = 20 print("\"${c.format("+10")}\"") }
运行结果如下:
" +20"
-
'#' 是针对进制打印的,对于二进制打印会补充一个 '0b' 或者 '0B',对于八进制打印会补充一个 '0o' 或者 '0O',对于十六进制会补充 '0x' 或者 '0X'。
代码如下:
import std.format.* main() { var c: Int32 = 1 print("\"${c.format("#10x")}\"") }
运行结果如下:
" 0x1"
-
'0' 适用于 Int,UInt 和 Float,在空位补充 0。
代码如下:
import std.format.* main() { var c: Int32 = -20 print("\"${c.format("010")}\"") }
运行结果如下:
"-000000020"
参数 width 宽度:
-
宽度为正整数,适用于 Int,UInt,Rune 和 Float,宽度前有负号则表示左对齐,没有负号则是右对齐,如果数值小于数值本身的长度,不会发生截断。 如果前缀有
+
或-
符号会占用一个字符位,如果前缀有0x
或0o
等会占用两个字符位。代码如下:
import std.format.* main() { var c: Int32 = 20 println("\"${c.format("1")}\"") println("\"${c.format("+4")}\"") }
运行结果如下:
"20" " +20"
参数 precision 精度:
-
精度为正整数,适用于 Int,UInt 和 Float。 对于浮点数表示小数点后的有效数字位数,如果不指定,那么则打印六位小数,如果小于数值本身有效数字的长度,那就四舍五入,如果大于就补全,补全的不一定是 0。
-
对于整数类型,不指定或者指定的数字小于数值本身的长度,则无效果,如果大于数值本身的长度,则在前面补全'0'。
代码如下:
import std.format.* main() { var e: Float32 = 1234.1 println("\"${e.format("20.20")}\"") var c: Int32 = -20 println("\"${c.format("10.8")}\"") }
运行结果如下:
"1234.09997558593750000000" " -00000020"
参数 specifier:
-
'b' | 'B' | 'o' | 'O' | 'x' | 'X' 适用于 Int 和 UInt 类型。
'b' | 'B' : 表示二进制格式打印
'o' | 'O' : 表示八进制格式打印
'x' | 'X' : 表示十六进制格式打印
代码如下:
import std.format.* main() { var a = 20 println("\"${a.format("b")}\"") println("\"${a.format("o")}\"") println("\"${a.format("x")}\"") println("\"${a.format("X")}\"") println("\"${a.format("#X")}\"") }
运行结果如下:
"10100" "24" "14" "14" "0X14"
-
'e' | 'E' | 'g' | 'G' 适用于 Float 类型。
'e' | 'E' : 科学计数法,小写和大写
'g' | 'G' : general,用十进制或者科学计数法表示,会选择精简的表示方式进行打印
代码如下:
import std.format.* main() { var f: Float32 = 1234.1 var c: Float32 = 123412341234.1 println("\"${f.format("20.2e")}\"") println("\"${f.format("20G")}\"") println("\"${c.format("20G")}\"") println("\"${f.format("20")}\"") println("\"${c.format("20")}\"") }
运行结果如下:
" 1.23e+03" " 1234.1" " 1.23412E+11" " 1234.099976" " 123412340736.000000"
API 列表
接口
接口名 | 功能 |
---|---|
Formatter | 该接口定义了格式化函数,即根据格式化参数将指定类型实例转换为对应格式的字符串。 |