格式串详解
不同语言格式串五花八门,究其本质,无非是如何处理格式串和变量对应关系。
示例: 输出右对齐宽度为8个字符整形数据
- C/ObjC/Java/Ruby/Go
- %8d
直接依赖库函数解析格式串,区分格式符前缀%、对齐长度、对齐方向、类型等,做填充、对齐操作。
- %8d
- C++
- std::setw(8)和std::right
C++ 输出流对象提供方法,设置对齐长度和对齐方向。
- std::setw(8)和std::right
- C#
- "{0,8:D}"
和C语言风格很像,不过用新的展示格式,冒号分隔。
- "{0,8:D}"
- Python
- {num:8d}
最接近C语言风格。
- {num:8d}
- Rust
- {:8}
- VB.NET
- String.Format("{0,8}", num)
格式串语法
- C语言: %[flag][min width][.precision][length]format
- min width/precision/length在不同语境部分可选或要忽略
- Java: %[arguments_index$][flags][field width][.precision]format
浮点数小数位
如下示例保留两位小数:
- 仓颉:float_var.format(".2")
- C/ObjC/C++: "%.2f"
格式串大小写
- C语言%g/%e代表浮点数,大写%G和%E功能一样,但表达指数的E用大写,而非前面的小写。
看起来另类的格式串
- C语言“%8%”会输出一个百分号%, 且左侧有7个空格。
- C语言%n代表已经输出的字节个数。
printf("hello我%n\n", &b); // 假设字符串UTF-8编码,b == 8
格式串补零
- C语言整数格式符%d/%o/%x/%u也可指定精度代表最少位数,最终输出位数不足,会补0.
printf("%.2d/%.2d/%.4d\n", 2, 12, 12345); // 02/12/12345
- %02d和%.2d一样可以补0.
宽度和精度可被指定?
- C语言可以动态指定格式串宽度和精度:
printf("%.*d\n", 2, 1); // 输出宽度是2,输出01,宽度2也可以用变量传入
废弃的格式符
- C语言早期,%D指代%ld, %O指代%lo, %X指代%lx, 但后来被发现其实%X也可以指代十六进制大写形式,后来这三个大写格式符被抛弃了。
微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。
我是程序员小迷(致力于C、C++、Java、Kotlin、Android、iOS、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。
欢迎关注。助您在编程路上越走越好!
原文地址:https://blog.csdn.net/cxsjabcabc/article/details/142530906
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!