【已解决】如何将 123456 转换为 123,456.00 这样的格式
本帖最后由 fxxl 于 2012-8-4 00:00 编辑请问如何将 123456 转换为123,456.00这样的格式?
stringformat 似乎没有合适的格式,难道哟啊自己写转换 UDF 吗?
有没有什么简单的方法,请指点。
自己动手写了个简单的转换函数,算是解决了,如果有更简单的(例如内置的方法),还请指教。
顺便附上自己写的UDF ,附件中的源代码,和下面贴出来的完全相同。 是否购买并无影响。
如果您认为代码对您有所帮助,请点击附件捐赠 1 块 {:face (356):}
$Money =12345678.1
MsgBox(0,"测试",ConverToCurrencyFormat($Money))
Func ConverToCurrencyFormat($Money)
;----------------------------
; 名称:ConverToMoneyFormat
; 参数:$Money : 待转换的金额
; 返回值:带 , 分隔的金额字符串,例如 123,456.01
; MakeBy : Fxxl
; time : 2012年8月3日
;----------------------------
;转换为 000.00 的格式
$tmp = StringFormat("%.2f", $Money)
;求整数部分 mod 3 ,并取出余数长度的前 N 位字符
$len = StringLen($tmp)-3
$Mod = Mod($len,3)
$MyConver = StringMid($tmp,1,$Mod)
; 对后续部分加上 ,分隔
For $i = 1 to($len-$Mod)/3
$MyConver = $MyConver & "," & StringMid($tmp, $Mod + ($i-1)*3+1,3)
Next
; 补上小数点数位
$MyConver = $MyConver & StringRight($tmp,3)
; 去掉多余的前导 ,
If $Mod = 0 Then $MyConver=StringMid($MyConver,2,StringLen($MyConver))
Return $MyConver
EndFunc
确实有更简单的方法,楼主参考论坛里一个正则的帖子,里面有现成的例子,然后用正则替换的函数
Ps:ipad码字真累 楼上提到了正则表达式,自己一直也是一知半解的,
第一次来,要努力学习,花了2小时研究出来的,正好刚开号要2小时后才能发帖
顺便问下2楼的金钱有什么用的;正则表达式学习
MsgBox(0,"测试:浮点->千分位货币",Format("1234567.890123"))
Func Format($sRs)
;无小数点的话,添加小数点
If StringInStr ($sRs, ".") = 0 Then $sRs = $sRs & "."
;查找小数点,并在小数点前的千分位上添加','
$sRs = StringRegExpReplace($sRs ,'\A(\d+)(\d{3})(\.)','$1,$2.')
;在每([数字][数字][数字],)前插入',',除非已经是字符串开头
While 1
$sRs = StringRegExpReplace($sRs,'\A(\d+)(\d{3}),','$1,$2,')
If @Extended = 0 Then ExitLoop
WEnd
;在小数位后补零,使小数位>=2位
$sRs = $sRs & "00"
;把小数位0.00后面的替换为空
$sRs = StringRegExpReplace($sRs,'\.(\d{1})(\d{1})(.*)','\.$1$2')
Return $sRs
EndFunc 感谢 3 楼的代码。 估计在调试正则表达式的时候,是花费了一番功夫的。
另外,如果你在这个论坛稍微逛一下,就会发现很多发代码者都是售价 N 元 之类的(哪怕只是抄来的代码或者很小的功能。)
很快就会发现,没有金币无法下载需要的附件。 (这点比较讨厌)
页:
[1]