format 包

介绍

format 包提供根据格式化参数将指定类型的实例转换成对应格式的字符串的功能。

格式化参数及其含义参见“格式化参数的语法”章节。

format 包提供了统一的格式化接口,并为 Char、Int8 等基本类型实现了该接口。

主要接口

interface Formatter

public interface Formatter {
    func format(fmt: String): String
}

format 包提供 Formatter interface 以及对于基本类型的实现。由基本类型 Int,UInt,Char 和 Float 继承 Formatter 接口。

该接口定义了格式化函数,即根据格式化参数将指定类型实例转换为对应格式的字符串。其他类型可通过实现该接口提供格式化功能。

func format

func format(fmt: String): String

功能:根据格式化参数将当前实例格式化为对应格式的字符串。

参数:

  • fmt:格式化参数

返回值:将当前实例格式化后得到的字符串

extend Char <: Formatter

extend Char <: Formatter

为 Char 扩展 Formatter 接口,以实现格式化字符串。

func format

public func format(fmt: String): String

功能:根据格式化参数将当前 Char 类型实例格式化为对应格式的字符串。

参数:

  • fmt:格式化参数

返回值:将当前 Char 类型实例格式化后得到的字符串

异常:

  • IllegalArgumentException:当 fmt 不合法时抛出异常

extend Int8 <: Formatter

extend Int8 <: Formatter

为 Int8 扩展 Formatter 接口,以实现格式化字符串。

func format

public func format(fmt: String): String

功能:根据格式化参数将当前 Int8 类型实例格式化为对应格式的字符串。

参数:

  • fmt:格式化参数

返回值:将当前 Int8 类型实例格式化后得到的字符串

异常:

  • IllegalArgumentException:当 fmt 不合法时抛出异常

extend Int16 <: Formatter

extend Int16 <: Formatter

为 Int16 扩展 Formatter 接口,以实现格式化字符串。

func format

public func format(fmt: String): String

功能:根据格式化参数将当前 Int16 类型实例格式化为对应格式的字符串。

参数:

  • fmt:格式化参数

返回值:将当前 Int16 类型实例格式化后得到的字符串

异常:

  • IllegalArgumentException:当 fmt 不合法时抛出异常

extend Int32 <: Formatter

extend Int32 <: Formatter

为 Int32 扩展 Formatter 接口,以实现格式化字符串。

func format

public func format(fmt: String): String

功能:根据格式化参数将当前 Int32 类型实例格式化为对应格式的字符串。

参数:

  • fmt:格式化参数

返回值:将当前 Int32 类型实例格式化后得到的字符串

异常:

  • IllegalArgumentException:当 fmt 不合法时抛出异常

extend Int64 <: Formatter

extend Int64 <: Formatter

为 Int64 扩展 Formatter 接口,以实现格式化字符串。

func format

public func format(fmt: String): String

功能:根据格式化参数将当前 Int64 类型实例格式化为对应格式的字符串。

参数:

  • fmt:格式化参数

返回值:将当前 Int64 类型实例格式化后得到的字符串

异常:

  • IllegalArgumentException:当 fmt 不合法时抛出异常

extend UInt8 <: Formatter

extend UInt8 <: Formatter

为 UInt8 扩展 Formatter 接口,以实现格式化字符串。

func format

public func format(fmt: String): String

功能:根据格式化参数将当前 UInt8 类型实例格式化为对应格式的字符串。

参数:

  • fmt:格式化参数

返回值:将当前 UInt8 类型实例格式化后得到的字符串

异常:

  • IllegalArgumentException:当 fmt 不合法时抛出异常

extend UInt16 <: Formatter

extend UInt16 <: Formatter

为 UInt16 扩展 Formatter 接口,以实现格式化字符串。

func format

public func format(fmt: String): String

功能:根据格式化参数将当前 UInt16 类型实例格式化为对应格式的字符串。

参数:

  • fmt:格式化参数

返回值:将当前 UInt16 类型实例格式化后得到的字符串

异常:

  • IllegalArgumentException:当 fmt 不合法时抛出异常

extend UInt32 <: Formatter

extend UInt32 <: Formatter

为 UInt32 扩展 Formatter 接口,以实现格式化字符串。

func format

public func format(fmt: String): String

功能:根据格式化参数将当前 UInt32 类型实例格式化为对应格式的字符串。

参数:

  • fmt:格式化参数

返回值:将当前 UInt32 类型实例格式化后得到的字符串

异常:

  • IllegalArgumentException:当 fmt 不合法时抛出异常

extend UInt64 <: Formatter

extend UInt64 <: Formatter

为 UInt64 扩展 Formatter 接口,以实现格式化字符串。

func format

public func format(fmt: String): String

功能:根据格式化参数将当前 UInt64 类型实例格式化为对应格式的字符串。

参数:

  • fmt:格式化参数

返回值:将当前 UInt64 类型实例格式化后得到的字符串

异常:

  • IllegalArgumentException:当 fmt 不合法时抛出异常

extend Float16 <: Formatter

extend Float16 <: Formatter

为 Float16 扩展 Formatter 接口,以实现格式化字符串。

func format

public func format(fmt: String): String

功能:根据格式化参数将当前 Float16 类型实例格式化为对应格式的字符串。

参数:

  • fmt:格式化参数

返回值:将当前 Float16 类型实例格式化后得到的字符串

异常:

  • IllegalArgumentException:当 fmt 不合法时抛出异常

extend Float32 <: Formatter

extend Float32 <: Formatter

为 Float32 扩展 Formatter 接口,以实现格式化字符串。

func format

public func format(fmt: String): String

功能:根据格式化参数将当前 Float32 类型实例格式化为对应格式的字符串。

参数:

  • fmt:格式化参数

返回值:将当前 Float32 类型实例格式化后得到的字符串

异常:

  • IllegalArgumentException:当 fmt 不合法时抛出异常

extend Float64 <: Formatter

extend Float64 <: Formatter

为 Float64 扩展 Formatter 接口,以实现格式化字符串。

func format

public func format(fmt: String): String

功能:根据格式化参数将当前 Float64 类型实例格式化为对应格式的字符串。

参数:

  • fmt:格式化参数

返回值:将当前 Float64 类型实例格式化后得到的字符串

异常:

  • IllegalArgumentException:当 fmt 不合法时抛出异常

格式化参数的语法

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,Char 和 Float,表示左对齐。

    代码如下:

    from std import format.*
    
    main() {
        var c : Int32 = -20
        print("\"${c.format("-10")}\"")
    }
    

    运行结果如下:

    "-20       "
    
  • '+' 适用于 Int,UInt 和 Float,如果数值为正数则打出 '+' 符号,如果数值为负数则忽略。

    代码如下:

    from std import format.*
    
    main() {
        var c: Int32 = 20
        print("\"${c.format("+10")}\"")
    }
    

    运行结果如下:

    "       +20"
    
  • '#' 是针对进制打印的,对于二进制打印会补充一个 '0b' 或者 '0B',对于八进制打印会补充一个 '0o' 或者 '0O',对于十六进制会补充 '0x' 或者 '0X'。

    代码如下:

    from std import format.*
    
    main() {
        var c: Int32 = 1
        print("\"${c.format("#10x")}\"")
    }
    

    运行结果如下:

    "       0x1"
    
  • '0' 适用于 Int,UInt 和 Float,在空位补充 0。

    代码如下:

    from std import format.*
    
    main() {
        var c: Int32 = -20
        print("\"${c.format("010")}\"")
    }
    

    运行结果如下:

    "-000000020"
    

参数 width 宽度:

  • 宽度为正整数,适用于 Int,UInt,Char 和 Float,宽度前有负号则表示左对齐,没有负号则是右对齐,如果数值小于数值本身的长度,不会发生截断。 如果前缀有 +- 符号会占用一个字符位,如果前缀有 0x0o 等会占用两个字符位。

    代码如下:

    from std import format.*
    
    main() {
        var c: Int32 = 20
        println("\"${c.format("1")}\"")
        println("\"${c.format("+4")}\"")
    }
    

    运行结果如下:

    "20"
    " +20"
    

参数 precision 精度:

  • 精度为正整数,适用于 Int,UInt 和 Float。 对于浮点数表示小数点后的有效数字位数,如果不指定,那么则打印六位小数,如果小于数值本身有效数字的长度,那就四舍五入,如果大于就补全,补全的不一定是 0。

  • 对于整数类型,不指定或者指定的数字小于数值本身的长度,则无效果,如果大于数值本身的长度,则在前面补全'0'。

    代码如下:

    from std import 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' : 表示十六进制格式打印

    代码如下:

    from std import 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,用十进制或者科学计数法表示,会选择精简的表示方式进行打印

    代码如下:

    from std import 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"
    

示例

格式化整型

下面是格式化整型示例。

代码如下:

from std import format.*

main(): Int64 {
    var a: Int32 = -20
    var res1 = a.format("-10")
    var res2 = a.format("+10")
    var res3 = (-20).format("10")
    var res4 = a.format("-")
    println("\"${res1}\"")
    println("\"${res2}\"")
    println("\"${res3}\"")
    println("\"${res4}\"")
    return 0
}

运行结果如下:

"-20       "
"       -20"
"       -20"
"-20"

格式化浮点型

下面是格式化浮点型示例。

代码如下:

 from std import format.*

/* flags '-' */
main(): Int64 {
    var a: Float16 = -0.34
    var b: Float32 = .34
    var c: Float64 = 3_0.3__4_
    var d: Float64 = 20.00
    /* left  align */
    var res1 = a.format("-20")
    /* right align */
    var res2 = b.format("+20")
    /* left  align */
    var res3 = c.format("10")
    /* left  align */
    var res4 = d.format("-10")
    /* left  align */
    var res5 = d.format("-")
    println("\"${res1}\"")
    println("\"${res2}\"")
    println("\"${res3}\"")
    println("\"${res4}\"")
    println("\"${res5}\"")
    return 0
}

运行结果如下:

"-0.340088           "
"           +0.340000"
" 30.340000"
"20.000000 "
"20.000000"

格式化字符型

下面是格式化字符型示例。

代码如下:

from std import format.*

main(): Int64 {
    var a: Char = 'a'
    var b = '-'
    /* left  align */
    var res1 = a.format("-10")
    /* right  align */
    var res2 = b.format("-10")
    /* left  align */
    var res3 = a.format("10")
    /* left  align */
    var res4 = b.format("10")
    println("\"${res1}\"")
    println("\"${res2}\"")
    println("\"${res3}\"")
    println("\"${res4}\"")
    return 0
}

运行结果如下:

"a         "
"-         "
"         a"
"         -"