您的位置:首页 > 财经 > 产业 > 微信商城开发定制_icons8官网_快速seo软件_正能量网站地址链接免费

微信商城开发定制_icons8官网_快速seo软件_正能量网站地址链接免费

2024/11/20 1:18:52 来源:https://blog.csdn.net/2301_77207909/article/details/142738928  浏览:    关键词:微信商城开发定制_icons8官网_快速seo软件_正能量网站地址链接免费
微信商城开发定制_icons8官网_快速seo软件_正能量网站地址链接免费

Linux学习笔记(八):awk实战小案例

怎么把数字金额用汉字表示?

思维过程

1.创建一个awk脚本文件

2.数据初始化

awk分为三部分:
BEGIN{} #主要初始化一些数据,定义一些静态值
...#中间代码
END{}

  • **我们需要初始化一个全局数组来记录汉字,方便取值,如["壹","贰",...]

3.校验

输入的校验,也许你应该校验输入值是不是一个合法金额

4.规整化

输入值,将所有输入值变成xxx.xx这样的格式方便操作

5.提取

提取出整数部分,和小数部分,并做出判断,如
全0:…
整数0: …
小数0: …
其他: …

分别处理

针对整数部分和小数部分分别编写函数进行汉字转变

  • 小数

提取出值在前面的初始化的数组中取值,如nums[i]
根据不同情况进行输出,主要处理0的情况

  • 整数

写一个方法,进行判断递归进行判断
如:

if (num >= 10000) {#取出剩下的nextNum = num % 10000;if (nextNum < 1000) return 递归(num / 10000) "万零" 递归(nextNum)return 递归(num / 10000) "万" 递归(nextNum)
}

类似的进行处理

调用

编写完成之后,进行调用看结果是否正确

代码

1.创建

touch num2zh

2.编写代码

#!/usr/bin/awk -f 
BEGIN{init()
}{printf "%10s\t",$1}!/^[+]?(([1-9][0-9]*)|0)(\.[0-9]{1,2})?$/{print "Error: Not a correct money"next
}/+/{gsub(/+/,"")
}{amount = sprintf("%.2f",$1)print num2str(amount)
}function num2str(n)
{cents = substr(n,length(n) - 1,2)dols = substr(n,1,length(n) - 3)if (dols+0 == 0 && cents+0 == 0)return "零圆整"if (dols+0 == 0)return double2str(cents) if (cents+0 == 0)return int2str(dols) "圆整"return int2str(dols) "圆" double2str(cents)
}function int2str(n)
{if (n+0 >= 100000000) {nextNum = n % 100000000if (nextNum != 0 && nextNum < 10000000) return int2str(int(n/100000000)) "亿零" int2str(nextNum)return int2str(int(n/100000000)) "亿" int2str(nextNum)}if (n+0 >= 10000) {nextNum = n % 10000if (nextNum != 0 && nextNum < 1000)return int2str(int(n/10000)) "万零" int2str(nextNum)return int2str(int(n/10000)) "万" int2str(nextNum)}if (n+0 >= 1000) {nextNum = n % 1000if (nextNum != 0 && nextNum < 100)return int2str(int(n/1000)) "仟零" int2str(nextNum)return int2str(int(n/1000)) "仟" int2str(nextNum)}if (n+0 >= 100) {nextNum = n % 100if (nextNum != 0 && nextNum < 10) return int2str(int(n/100)) "佰零" int2str(nextNum)return int2str(int(n/100)) "佰" int2str(nextNum)}if (n+0 >= 10) {return int2str(int(n/10)) "拾" int2str(n%10)}if (n+0 == 0) return ""return nums[n]
}function double2str(c)
{a = int(c/10)b = c % 10 if (a+0 == 0)return nums[b] "分"if (b+0 == 0)return nums[a] "角"return nums[a] "角" nums[b] "分"
}function init()
{split("壹,贰,叁,肆,伍,陆,柒,捌,玖",nums,",")
}

3.使用

# 1.创建输入文件,如下
vi amount.txt
-300
123456.789
1234567.89
+987654.30
123456.00
3.4.5
0
100301
100300
100300.05
3000
300001
101010101.01# 赋予可执行权限
chmod +x num2zh#运行
./num2zh amount.txt#结果-300      Error: Not a correct money
123456.789      Error: Not a correct money
1234567.89      壹佰贰拾叁万贰拾叁圆捌角玖分
+987654.30      玖拾捌万柒仟陆佰伍拾肆圆叁角123456.00      壹拾贰万叁仟肆佰伍拾陆圆整3.4.5      Error: Not a correct money0      零圆整100301      壹拾万零叁佰零壹圆整100300      壹拾万零叁佰圆整100300.05      壹拾万零叁佰圆伍分3000      叁仟圆整300001      叁拾万零壹圆整
101010101.01    壹亿零壹佰零壹万零壹圆壹分

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com