格式化字符串%[parameter][flags][field width][.precision][length]type讲解

本文主要是介绍格式化字符串%[parameter][flags][field width][.precision][length]type讲解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

格式化函数

string.format用来格式化字符串(按指定的规则连接字符串或输出其他变量并返回新的字符串) 。
使用方法与C语言的printf函数相同(实际上很多编程语言中都有同样的格式化函数).

str = string.format(fm,...);
第一个参数用fm表示输出的格式,每个%符号后面是一个格式化表达式,每个格式化表达式按顺序对应后面的参数。
所以用了N个格式化表达式,就必须在后面添加N个参数。

下面是一个简单的例子:

int = 123;
str = "字符串"

//下面的%s对应参数str, %i对应参数int
str = string. format( "这是字符串:'%s' 这是数字值 %i", str, int);

io.open()
io.print(str);

//%05i表示格式化为至少五位的数字,不足在前面补0
str = string. format( "%05i", int);
io.print(str);

 

格式化语法

格式化表达式:

%[零个或多个标志][最小字段宽度][精度][修改符]格式码

 

注意:[]方括号表示可选参数

1、格式码

代码 c
参数 数字值(number)
含义 参数被裁剪为8位字节码并作为字符进行打印。

代码 i,d
参数 数字值(number)
含义 参数作为一个十进制整数打印。如果给出了精度而且值的位数小于精度位数,前面就用0填充。

代码 u,o,x,X
参数 数字值(number)
含义 参数作为一个无符号数字值打印,u使用十进制,o使用八进制,x或X使用十六进制,两者的区别是x约定使用abcdef,而X约定使用ABCDEF。

代码 e,E
参数 数字值(number)
含义 参数根据指数形式打印。例如,6.023000e23是使用代码e,6.023000E23是使用代码E。小数点后面的位数由精度字段决定,缺省值是6。

代码 f
参数 数字值(number)
含义 参数按照的常规浮点格式打印。精度字段决定小数点后面的位数,缺省值是6。

代码 g,G
参数 数字值(number)
含义 参数以%f或%e(如G则%E)的格式打印,取决于它的值。如果指数大于等于-4但小于精度字段就使用%f格式,否则使用指数格式。

代码 s
参数 字符串值(string)
含义 打印一个字符串。

代码 q
参数 (无)
含义 打印一个字符串,并将字符串置于一对引号中,如果字符串中包含引号换行等自动添加转义符。如果要读取一个字符串传为代码。为避免用户恶意注入引号等特殊字符,可以使用%q进行格式化。

代码 %
参数 (无)
含义 取消%转义打印一个%字符,即用%%表示本来的%。

2、 标志

标志 -
含义 值在字段中做对齐,缺省情况下是右对齐。

标志 0
含义 当数值为右对齐时,缺省情况下是使用空格填充值左边未使用的列。这个标志表示用零填充,它可用于d,i,u,o,x,X,e,E,f,g和G代码。
使用d,i,u,o,x和X代码时,如果给出了精度字段,零标志就被忽略。如果格式代码中出现了负号,零标志也没有效果。

标志 +
含义 当用于一个格式化某个有符号值代码时,如果值非负,正号标志就会给它加上一个正号。如果该值为负,就像往常一样显示一个负号。在
缺省情况下,正号并不会显示。

标志 空格
含义 只用于转换有符号值的代码。当值非负时,这个标志把一个空格添加到它开始的位置。注意这个标志和正号标志是相互排斥的,如果两个
同时给出,空格标志便被忽略。

标志 #
含义 选择某些代码的另一种转换形式:

用于... #标志...
o 保证产生的值以一个零开头
x,X 在非零值前面加0x前缀(%X则为0X)
e,E,f 确保结果始终包含一个小数点,即使它后面没有数字
g,G 和上面的e,E和f代码相同。另外,缀尾的0并不从小数中去除

3、 字段宽度

字段宽度是一个十进制整数,用于指定将出现在结果中的最小字符数。如果值的字符数少于字段宽度,就对它进行填充以增加长度。

4、 精度

精度以一个句点开头,后面跟一个可选的十进制数。如果未给出整数,精度的缺省值为零。

对于d,i,u,o,x和X类型的转换,精度字段指定将出现在结果中的最小的数字个数并覆盖零标志。如果转换后的值的位数小于宽度,就在它的前面插入零。如果值为零且精度也为零,则转换结果就不会产生数字。

对于e,E和f类型的转换,精度决定将出现在小数点之后的数字位数。

对于g和G类型的转换,它指定将出现在结果中的最大有效位数。

当使用s类型的转换时,精度指定将被转换的最多的字符数。

如果用于表示字段宽度和/或精度的十进制整数由一个星号代替,那么string.format的下一个参数(必须是个整数)就提供宽度和(或)精度。因此,
这些值可以通过计算获得而不必预先指定。

5、格式语法示例

格式代码AABCABCDEFGH
%sAABCABCDEFGH
%5s ####A##ABCABCDEFGH
%.5sAABCABCDE
%5.5s####A##ABCABCDE
%-5sA####ABC##ABCDEFGH
 
格式代码1-1212345123456789
%d1-1212345123456789
%6d#####1###-12#12345123456789
%.4d0001-001212345123456789
%6.4d##0001#-0012#12345123456789
%-4d1####-12#12345123456789
%04d0001-01212345123456789
%+d+1-12+12345+123456789
 
格式代码1.01.0001234512345.6789
%f1.0000000.0100000.00012312345.678900
%10.2f######1.00#####0.01######0.00##12345.67
%e1.000000e+001.000000e-021.234500e-041.234568e+04
%.4e1.0000e+001.0000e-021.2345e-041.2346e+04
%g10.010.0001234512345.7
 
格式代码6.023e23
%f60229999999999975882752.000000
%10.2f60229999999999975882752.00
%e6.023000e+23
%.4e6.0230e+23
%g6.023e+23

用上面的格式化函数可以轻松实现数字的进制转换( 请参考:数值与进制 )

io.open()

//数字转换为二进制字符串
str = string.format("%b",23 );
io.print(str)

//二进制字符串转换为数字
n = tonumber(str,2)

//数字转换为八进制字符串
str = string.format("%o",23 );
io.print(str)

//八进制字符串转换为数字
n = tonumber(str,8)

//数字转换为十六进制字符串
str = string.format("%x",23 );
io.print(str)

//十六进制字符串转换为数字
n = tonumber(str,16)

这篇关于格式化字符串%[parameter][flags][field width][.precision][length]type讲解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/865969

相关文章

Java中的StringBuilder之如何高效构建字符串

《Java中的StringBuilder之如何高效构建字符串》本文将深入浅出地介绍StringBuilder的使用方法、性能优势以及相关字符串处理技术,结合代码示例帮助读者更好地理解和应用,希望对大家... 目录关键点什么是 StringBuilder?为什么需要 StringBuilder?如何使用 St

SpringBoot项目中报错The field screenShot exceeds its maximum permitted size of 1048576 bytes.的问题及解决

《SpringBoot项目中报错ThefieldscreenShotexceedsitsmaximumpermittedsizeof1048576bytes.的问题及解决》这篇文章... 目录项目场景问题描述原因分析解决方案总结项目场景javascript提示:项目相关背景:项目场景:基于Spring

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

Java中字符串转时间与时间转字符串的操作详解

《Java中字符串转时间与时间转字符串的操作详解》Java的java.time包提供了强大的日期和时间处理功能,通过DateTimeFormatter可以轻松地在日期时间对象和字符串之间进行转换,下面... 目录一、字符串转时间(一)使用预定义格式(二)自定义格式二、时间转字符串(一)使用预定义格式(二)自

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

一文详解如何在Python中从字符串中提取部分内容

《一文详解如何在Python中从字符串中提取部分内容》:本文主要介绍如何在Python中从字符串中提取部分内容的相关资料,包括使用正则表达式、Pyparsing库、AST(抽象语法树)、字符串操作... 目录前言解决方案方法一:使用正则表达式方法二:使用 Pyparsing方法三:使用 AST方法四:使用字

Java字符串处理全解析(String、StringBuilder与StringBuffer)

《Java字符串处理全解析(String、StringBuilder与StringBuffer)》:本文主要介绍Java字符串处理全解析(String、StringBuilder与StringBu... 目录Java字符串处理全解析:String、StringBuilder与StringBuffer一、St

C++ vector的常见用法超详细讲解

《C++vector的常见用法超详细讲解》:本文主要介绍C++vector的常见用法,包括C++中vector容器的定义、初始化方法、访问元素、常用函数及其时间复杂度,通过代码介绍的非常详细,... 目录1、vector的定义2、vector常用初始化方法1、使编程用花括号直接赋值2、使用圆括号赋值3、ve

MySQL更新某个字段拼接固定字符串的实现

《MySQL更新某个字段拼接固定字符串的实现》在MySQL中,我们经常需要对数据库中的某个字段进行更新操作,本文就来介绍一下MySQL更新某个字段拼接固定字符串的实现,感兴趣的可以了解一下... 目录1. 查看字段当前值2. 更新字段拼接固定字符串3. 验证更新结果mysql更新某个字段拼接固定字符串 -

Java String字符串的常用使用方法

《JavaString字符串的常用使用方法》String是JDK提供的一个类,是引用类型,并不是基本的数据类型,String用于字符串操作,在之前学习c语言的时候,对于一些字符串,会初始化字符数组表... 目录一、什么是String二、如何定义一个String1. 用双引号定义2. 通过构造函数定义三、St