概述
在编写myList
类的时候,涉及了格式化显示有序列表的序号问题,于是编写出了一套新的函数库myNum
,用于方便的处理整数或浮点数格式化。
初期只加入了几个简单函数,后续会加入十、十六、二进制转化以及科学计数法等内容。(本文会及时更新代码和使用案例)
代码
# ========================================================
# 名称:myNum
# 类型:静态函数库
# 简介:提供数字相关的处理函数
# 作者:巽星石
# Godot版本:v4.2.2.stable.official [15073afe3]
# 创建时间:2024年4月27日12:16:57
# 最后修改时间:2024年4月27日13:17:00
# ========================================================
class_name myNum
# ============================ 获取数字的位数 ============================
# 返回整数或浮点数的位数(不包含小数点)
static func get_length(num) -> int:
if num is int:
return str(num).length()
elif num is float:
return str(num).length() - 1
else:
return -1
# ============================ 判断类型 ============================
# 判断数字是否是整数
static func is_int(num) -> bool:
return num is int
# 判断数字是否是浮点数
static func is_float(num) -> bool:
return num is float
# ============================ 获取浮点数的整数或小数部分 ============================
# 获取浮点数的整数部分
static func get_float_int(num:float) -> int:
return int(str(num).split(".")[0])
# 获取浮点数的小数部分
static func get_float_point_num(num:float) -> float:
return float("0." + str(num).split(".")[1])
# ============================ 格式化显示 ============================
# 格式化显示
static func format(num,format:String) -> String:
if num is int: # 整数,前面补0
var fm = "%" + "0%dd" % format.length()
return fm % num
elif num is float:
# 获取整数和小数部分
var int_num # 整数部分
var point_num # 小数部分
if format.find(".") == -1: # 没有小数点
int_num = str(num).split(".")[0]
point_num = ""
var fm1 = "%" + "0%dd" % format.split(".")[0].length()
return fm1 % int(int_num) # 返回格式化的整数部分
elif format.find(".") == 0: # 没有设定整数格式
int_num = str(num).split(".")[0]
point_num = str(num).split(".")[1]
var fm2 = "%" + "0-%dd" % [format.length()-1]
return "%s.%s" % [int_num,fm2 % int(point_num)]
else:
int_num = str(num).split(".")[0]
point_num = str(num).split(".")[1]
var fm1 = "%" + "0%dd" % format.split(".")[0].length()
var fm2 = "%" + "0-%dd" % format.split(".")[1].length()
# 格式化整数和小数部分
int_num = fm1 % int(int_num)
point_num = fm2 % int(point_num)
# 返回完整字符串
return "%s.%s" % [int_num,point_num]
else:
return ""
获取数字的位数
print(myNum.get_length(12)) # 2
print(myNum.get_length(12.35)) # 4
print(myNum.get_length(0.35)) # 3
判断一个数是否是整数或浮点数
print(myNum.is_float(123)) # false
print(myNum.is_float(123.25)) # true
获取浮点数的整数和小数部分
print(myNum.get_float_int(123.25)) # 123
print(myNum.get_float_point_num(123.25)) # 0.25
数字格式化
print(myNum.format(123.25,"0000.0000")) # 0123.2500
print(myNum.format(123.25,"0000")) # 0123
print(myNum.format(123.25,".0000")) # 123.2500
print(myNum.format(123,"0000")) # 0123
print(myNum.format(123,".0000")) # 00123 .被当做一个有效位数