实用技能系列
- Unity实用技能-UI滑动条技能总结
- Unity实用技能-UI规范总结
- Unity实用技能-协作规范总结
- Unity实用技能-UI与粒子效果总结
- Unity实用技能-UI定位总结
- Unity实用技能-背景自适应文本
文章目录
前言
前段时间接触了许多和格式化有关的需求,总结一下
什么是format文字?
就是用
既定API填充字符串中的格式符,如lua中的string.format("你好,还有%d分钟结束",2),其中的%d表示输入有符号整数,然后按格式填充一个字符串中的格式符
策划如何配格式化表?
- 实际上,程序经常需要分析策划的具体需求,考虑了各种情况后,指挥策划配成怎样的表,其中有些UI需求就包括格式化参数
- 一般来说
纯显示的文本,只需要填%s即可,这样不管是小数还是整数都能兼容 - 有时候需要在UI上显示%,而我
项目中使用的是lua,所以字符串中用%%即可表示一个%
对于无四舍五入保留一位小数且带单位,并且小数后首位为0要省略0,而且小于单位的数全部保留无小数,怎么实现格式化?
比如12345解析为带万,即显示为1.2万;10892解析为1万;7998解析为7998
- 首先对于超过一万和没超过一万的是两种情况
- 分类情况后,超过一万的则需要充分利用向下取整和区分整数部分和小数部分的思想,这样就能比较好地格式化,如下lua代码
lua
function formatNumber(num)
if num < 10000 then
-- 使用 %g 自动处理整数和小数
return string.format("%g", num)
else
-- 大数格式化
local value = num / 10000
local integerPart = math.floor(value)
local firstDecimal = math.floor((num % 10000) / 1000)
return firstDecimal == 0 and
string.format("%d万", integerPart) or
string.format("%.1f万", value)
end
end
-- 测试
print(formatNumber(10)) -- 输出: 10
print(formatNumber(10.5)) -- 输出: 10.5
print(formatNumber(10.0)) -- 输出: 10
print(formatNumber(9999)) -- 输出: 9999
print(formatNumber(9999.9)) -- 输出: 9999.9
print(formatNumber(10000)) -- 输出: 1万
print(formatNumber(10500)) -- 输出: 1万
print(formatNumber(11000)) -- 输出: 1.1万
总结
目前遇到的格式化问题就是这样,之后有新的格式化问题也会继续在这里补充