netegg 发表于 2013-3-3 16:26:12

回复 15# afan
我知道了

netegg 发表于 2013-3-3 16:41:52

不整了,算0的话没法算了,中间的4的整数个数0不算的话,可以有6个0
10000001

afan 发表于 2013-3-3 16:53:34

不整了,算0的话没法算了,中间的4的整数个数0不算的话,可以有6个0
10000001
netegg 发表于 2013-3-3 16:41 http://www.autoitx.com/images/common/back.gif


    这不就是“一千万零一”

netegg 发表于 2013-3-3 17:16:20

回复 18# afan
是啊,但是情况貌似多了点

link369 发表于 2013-3-3 22:26:00

研究研究。。。。

netegg 发表于 2013-3-4 04:32:31

本帖最后由 netegg 于 2013-3-4 04:48 编辑

#include <WinAPIEx.au3>
#include <array.au3>
$tFormat = _WinAPI_CreateNumberFormatInfo(0, 0, 4, '', ' ', 0)
$num = _WinAPI_GetNumberFormat(0, '15700970090560901', $tFormat)
$aNum = StringSplit($num, ' ', 2)
Local $aDigit = ['', '万', '亿', '兆', '京']
Local $aDec = ['0', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
$ret = ''
For $i = 0 To UBound($aNum) - 1
        Switch StringLen($aNum[$i])
                Case 4
                        $ret &= StringFormat('%s仟%s佰%s拾%s', $aDec, 1))], $aDec, 2, 1))], $aDec, 3, 1))], $aDec, 1))]) & $aDigit
                Case 3
                        $ret &= StringFormat('%s佰%s拾%s', $aDec, 1))], $aDec, 2, 1))], $aDec, 1))]) & $aDigit
                Case 2
                        $ret &= StringFormat('%s拾%s', $aDec, 1))], $aDec, 1))]) & $aDigit
                Case 1
                        $ret &= StringFormat('%s', $aNum[$i]) & $aDigit
        EndSwitch
Next
$ret = StringRegExpReplace($ret, '0[仟|佰|拾]', '0')
$ret = StringRegExpReplace($ret, '0{1,}', '零')
$ret = StringReplace($ret, '零兆', '兆')
$ret = StringReplace($ret, '零亿', '亿')
$ret = StringReplace($ret, '零万', '万')
$ret = StringReplace($ret, '零京', '京')
MsgBox(0, 0, $ret)还有点问题

netegg 发表于 2013-3-4 07:09:40

本帖最后由 netegg 于 2013-3-4 11:53 编辑

再简单些吧!!
$num = '15700970090560901'
$aNum = StringRegExp(StringFormat('%0' & Ceiling(StringLen($num) / 4) * 4 & 's', $num), '\d{4}', 3)
Local $aDigit = ['', '万', '亿', '兆', '京']
Local $aDec = ['0', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
$ret = ''
For $i = 0 To UBound($aNum) - 1
        $ret &= StringFormat('%s仟%s佰%s拾%s', $aDec, 1))], $aDec, 2, 1))], $aDec, 3, 1))], $aDec, 1))]) & $aDigit
Next
$ret = StringReplace(StringReplace(StringReplace(StringReplace(StringRegExpReplace(StringRegExpReplace($ret, '0[仟|佰|拾]', '0'), '0{1,}', '零'), '零兆', '兆'), '零亿', '亿'), '零万', '万'), '零京', '京')
MsgBox(0, 0, stringtrimright(stringtrimleft($ret,BitAND(StringInStr(StringLeft($ret, 1), '零'),1)), BitAND(StringInStr(Stringright($ret, 1), '零'),1)))
开头结尾两个零不知道怎么搞了,只好凑了一下,先放着了
afan那个数如下,用上面的代码做的,楼主的那几个数如图1
基本无位数限制,只要有对应单位名称就行

netegg 发表于 2013-3-4 15:40:45

可以搞到77位数
把Local $aDigit = 这行改成
Local $aDigit = ['', '万', '亿', '兆', '京', '垓', '杼','穰','沟','涧','正','载','极','恒河沙', '阿僧只','那由他','不可思议','无量','大数']懒得继续往下添了,估计这么大的数够用了
计数单位见http://wenwen.soso.com/z/q165938584.htm

netegg 发表于 2013-3-5 12:34:47

本帖最后由 netegg 于 2013-3-5 19:54 编辑

第九行改成
$ret = StringRegExpReplace(StringRegExpReplace($ret, '零[仟|佰|拾]', '零'), '零(?=[京|兆|亿|万])|^零|零$|零{2,}', '')
msgbox(0,0,$ret)

liupeng1990607 发表于 2013-3-6 09:20:36

学习下!!!!!!!!!!!!!!

kk_lee69 发表于 2017-9-5 00:32:06

留個腳印 macgyver不錯的資料
页: 1 [2]
查看完整版本: 字串问题 求解