环境、版本及语言:Windows10,Godot 4.2.1.stable,GDScript
一、前言
游戏中数字过大时不可能全显示在屏幕上,所以需要单位转换,如10000->10k,1000000->1m等等
二、代码实现
以下代码可以设置成全局脚本(自动加载)或根据项目需要设置。
脚本实现:输入需要处理的数据,返回转换后的字符串,保留两位小数,末尾去0,4位数以下不转换,可自行修改if len <= x。symbol数组存放单位,可自行添加
extends Node
# 单位
var symbol: Array[String] = ["K", "M", "B", "T", "aa", "ab", "ac", "ad"]
# 数据转换
func transform(num: float) -> String:
var num_s: String = str(num) # 转换为字符串
var num_int: String = num_s.split(".")[0] # 整数部分
var len: int = len(num_int) # 整数位长度
if len <= 4: # 小于4位
# 小数部分,不存在小数返回00,超过2位取前两位
var num_dec: String = (
num_s.split(".")[1] if len(num_s.split(".")) > 1 else "00"
).substr(0, 2)
# 结果,保留两位小数,末尾去0
var result: String = (
num_int + "." + num_dec
).rstrip("0").rstrip(".")
return result
else:
len -= 4
var index: int = len / 3 # 单位索引
var last: int = len % 3 # 位数余数
# 结果
var result: String = (
num_int.substr(0, last + 1) + "." + num_int.substr(last + 1, 2)
).rstrip("0").rstrip(".") + symbol[index]
return result