//format 数值格式化 namespace math.format; var thousandSeparator; var stringify = ..math.stringify; thousands = function(v,sep,precision){ sep = sep || thousandSeparator || getThousandSeparator(); return ..string.reduceReplace( stringify(v,precision), "^-?\d+", "(\d)<<\d\d\d>+\d?!>?=", "\1"+sep ); } getThousandSeparator = function(lcid){ var r = { BYTE b[1] = ""}; thousandSeparator = ::Kernel32.GetLocaleInfoA(lcid||0x400,0xF/*_LOCALE_STHOUSAND*/,r,1) ? r.b : ","; return thousandSeparator; } getDecimalPoint = function(){ return tostring(0.1)[[2]]; } var sizeUnits = ["","K","M","G","T","P","E"] size = function(value=0,fmt,kSize=1000,precision=2){ var unitIndex = 0; while(value>=kSize){ value = value / kSize; unitIndex ++; } if(fmt===null)fmt = kSize==1024?"%s %sB":"%s%s"; elseif(!..string.indexOf(fmt,"%s")){ var m = ..string.split(fmt,","); if(#m==2) fmt = unitIndex?m[2]:m[1]; fmt = ..string.concat(fmt[1]==' '#?"%s%s":"%s %s",fmt) } var u = sizeUnits[unitIndex +1] if(u) { if(!(fmt && ..string.indexOf(fmt,"%s"))) fmt = ..string.concat("%s%s",fmt); return ..string.format(fmt, tostring(..math.round(value,precision )),u) } } /*****intellisense(math.format) thousands( = 将数值添加千位分隔符。\n此函数默认使用区域设置指定的千位分隔符,也可以使用参数自定义分隔符。\n注意在 aardio 代码中数值允许使用下划线作为分隔符或千位分隔符。 thousands(.(value,separator,precision) = @参数 @value 可指定数值、math.size64 对象、字符串、buffer 等。\n仅指定数值参数时参数 @precision 有效(用于指定小数位精度)。\n如果指定数值则首先调用 math.stringify 格式化为字符串。\n\n可选用参数 @separator 自定义千位分隔符。\n默认调用 math.format.getThousandSeparator 获取区域设置的千位分隔符。\n此函数会在当前线程缓存默认的千位分隔符以避免重复获取,\n每次 math.format.getThousandSeparator 被调用时也会刷新此默认值。 size( = 将数值转换为带有单位前缀的字符串。\n\如果仅仅需要格式化字节单位,可使用 math.size64 对象的 format 方法。\nmath.format.size 则不仅仅用于格式化字节单位,并且提供了更多参数选项。 size(.(number,fmt,kSize,precision) = 所有参数都是可选参数。\n\n- 参数 @number 指定要格式化的数值(默认为 0)。\n\n- 参数 @kSize 指定 1K 表示的大小,默认为 1000。\n\n- 参数 @fmt 指定格式化字符串。\n 格式化字符串可选包含 `%s%s`,\n 第一个 `%s` 用于输出转为字符串的数值,第二个 `%s` 用于输出 K,M,G 等单位缩写。\n \n 如果格式化串不包含 `%s`则将 @fmt 作为附加后缀输出,\n 如果这种附加后缀第一个字符不是空格,则在数值与 K,M,G 等单位缩写之间插入空格。\n \n @fmt 可以用逗号分隔两个格式化串,逗号前的部分用于格式化小于 1K 的数值,例如。\n\n- 参数 @precision 指定小数精度,默认为 2。 getThousandSeparator() = 返回当前区域设置的千位分隔符 getDecimalPoint() = 获取当前区域设置的小数点 end intellisense*****/