【PB案例学习笔记】-21小大写金额转换
写在前面
这是PB案例学习笔记系列文章的第21篇,该系列文章适合具有一定PB基础的读者。
通过一个个由浅入深的编程实战案例学习,提高编程技巧,以保证小伙伴们能应付公司的各种开发需求。
文章中设计到的源码,小凡都上传到了gitee代码仓库https://gitee.com/xiezhr/pb-project-example.git

需要源代码的小伙伴们可以自行下载查看,后续文章涉及到的案例代码也都会提交到这个仓库【pb-project-example】
如果对小伙伴有所帮助,希望能给一个小星星⭐支持一下小凡。
一、小目标
在日常开发中,我们经常会需要将小写的金额转换成大写的金额显示。比如说在做收费系统时,完成一笔费用结算,往往需要在
发票上显示费用大写金额。最终实现效果如下

在本案例中,小大写转换属于通用功能,所以我们需要学会全局函数的封装
二、全局函数简介
自定义全局函数不封装在其他对象内,而是作为独立的对象存储。自定义全局函数常用于处理一些通用功能,例如数字计算、字符串处理等等通用功能。通过自定义全局函数,有利于在程序的各个地方很方便的调用。同时也方便将函数移植到其他程序
三、创建程序基本框架
① 新建examplework 工作区
② 新建exampleapp应用
③ 新建w_main窗口,并将其Title设置为"自定义函数之小大写金额转换"
④ 控件布局
在窗口w_main上添加1个EditMask控件,1个SingleLineEdit 控件和一个CommandButton控件
依次命名为em_1、sle_1、cb_1,布局如下
em_1: 用于输入小写金额sle_1:用于显示大写金额cb_1: 转换功能按钮,小大写转换功能写在此按钮事件中

四、建立自定义全局函数
① 建立函数对象
在菜单栏中单击File-->New 命令,然后在PB Object选项卡中选择Function图标,然后单击【ok】按钮,然后进入函数定义面板


② 编写函数代码
string dx_sz,dx_dw,str_int,str_dec,dx_str,fu,a,b,b2,c,d,result
long num_int,num_dec,len_int,i,a_int,ppdx_sz = "零壹贰叁肆伍陆柒捌玖"
dx_dw = "万仟佰拾亿仟佰拾万仟佰拾元" //处理小于零情况
if xjje<0 thenxjje = xjje*(-1) fu = "负"
else fu = ""
end if //取得整数及整数串
dx_str = string(xjje)
if (xjje>0) and (xjje<1) then dx_str = "0"+dx_str
pp = pos(dx_str,".")
if pp>0 then str_int = mid(dx_str,1,pos(dx_str,".")-1)
elsestr_int = dx_str
end if
num_int = long(str_int) //取得小数及小数串
if (xjje>0) and (xjje<1) then num_dec = xjje * 100
elsenum_dec = (xjje - num_int) * 100
end if
str_dec = string(num_dec)
len_int = len(str_int)
dx_str = "" //转换整整部分
for i = 1 to len_int //a为小写数字字符,b为对应的大写字符,c为对应大写单位,d为当前大写字符串的最后一个汉字a= mid(str_int,i,1) a_int = long(a) b = mid(dx_sz,(a_int*2)+1,2) c = mid(dx_dw,((13 - len_int +i - 1)*2+1),2) if dx_str<>"" thend=mid(dx_str,len(dx_str)-1,2)elsed= "" end if if (b="零") and ((d="零") or (b=b2) or (c="元") or (c="万") or (c="亿")) then b = "" if (a="0") and (c<>"元") and (c<>"万") and (c<>"亿") then c="" if ((c="元") or (c="万") or (c="亿")) and (d="零") and (a="0") thendx_str = mid(dx_str,1,len(dx_str)-2) d=mid(dx_str,len(dx_str)-1,2) if ((c="元") and (d="万")) or ((c="万") and (d="亿")) then c = "" end if dx_str = dx_str + b+ c b2 = b
next//处理金额小于1的情况if len(dx_str) <= 2 then dx_str= "" //转换小数部分if (num_dec<10) and (xjje>0) thena_int = long(str_dec) b = mid(dx_sz,(a_int*2+1),2) if num_dec = 0 then dx_str = dx_str + "整" if num_dec > 0 then dx_str = dx_str +"零"+b+"分" end ifif num_dec >= 10 thena_int = long(mid(str_dec,1,1)) a = mid(dx_sz,(a_int*2+1),2) a_int = long(mid(str_dec,2,1)) b = mid(dx_sz,(a_int*2+1),2) if a<>"零" then a = a+"角" if b <> "零" thenb = b+"分"else b= "" end ifdx_str = dx_str + a + b end ifif xjje= 0 then dx_str = "零元整" dx_str = fu+dx_str result = dx_str return result
③ 保存函数
五、编写程序代码
① 给按钮cb_1的Clicked事件添加如下代码
dec ld_xjjeld_xjje = dec(em_1.text)sle_1.text = gf_lowercase_trans(ld_xjje)
② 双击代码编辑框左边的System Tree中的exampleapp应用,在其Open事件中添加如下代码
open(w_main)
六、运行程序
经过一波代码输出后,来检验下成果。

本期内容到这儿就结束了,★,°:.☆( ̄▽ ̄)/$:.°★ 。 希望对您有所帮助
我们下期再见 ヾ(•ω•`)o (●’◡’●)
相关文章:
【PB案例学习笔记】-21小大写金额转换
写在前面 这是PB案例学习笔记系列文章的第21篇,该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习,提高编程技巧,以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码,小凡都上传到了gite…...
12.实战私有数据微调ChatGLM3
实战私有数据微调ChatGLM3 实战私有数据微调ChatGLM3实战构造私有的微调数据集基于 ChatGPT 设计生成训练数据的 Prompt使用 LangChain GPT-3.5-Turbo 生成训练数据样例训练数据解析、数据增强和持久化存储自动化批量生成训练数据集流水线提示工程(Prompt Engineer…...
PHP地方门户分类信息网站源码讯客分类信息系统源码(含手机版)
源码介绍 1.上传程序到网站根目录,访问http://域名/install/index.php 进行安装,不要直接打开网址,先直接安装; 2.安装完成后 后台恢复数据即可 默认帐号密码都是admin http://域名/admin/ 3.不要删除任何文件,因为删除文件或者修改代码可能造成错误 运…...
设计模式 —— 观察者模式
设计模式 —— 观察者模式 什么是观察者模式观察者模式定义观察者模式的角色观察者模式的使用场景观察者模式的实现 被观察者(Subject)观察者(Observer)通知(notify)更新显示(update)…...
光纤跳线(又称光纤连接器)的种类
光纤跳线(又称光纤连接器),也就是接入光模块的光纤接头,也有好多种,且相互之间不可以互用。SFP模块接LC光纤连接器,而GBIC接的是SC光纤连接器。下面对网络工程中几种常用的光纤连接器进行详细的说明&#x…...
探索Ubuntu:从入门到精通
目录 一、什么是Ubuntu? 1.1 Ubuntu的定义和背景 1.2 Ubuntu的特点 二、安装Ubuntu 2.1 下载Ubuntu安装镜像 2.2 制作启动盘 2.3 安装Ubuntu 三、初步设置和基本操作 3.1 系统更新 3.2 安装必要软件 3.3 设置和管理用户账户 四、文件和目录管理 4.1 文件管理器 …...
SpringMVC-基础架构
一、什么是MVC 二、什么是SpringMVC 三、SpringMVC的特点 四、配置SpringMVC 简单流程: 总体框架 1.创建pom.xml依赖 <!--打包方式--><packaging>war</packaging><!--依赖--><dependencies><dependency><groupId>org.s…...
《Windows API每日一练》4.1 GDI绘图
本节必须掌握的知识点: GDI原理 GDI函数调用 GDI基本图形 4.1.1 GDI原理 GDI,全称是Graphics Device Interface(图形设备接口),是微软Windows操作系统中提供的一套用于渲染图形和格式化文本的API(应用程序…...
SQL Server 安装后,服务器再改名,造成名称不一致,查询并修改数据库服务器真实名称
SELECT SERVERNAME -- 1.查询旧服务器名称 SELECT serverproperty(servername) AS new --2.查询新服务器名称 -- 3.更新服务器名称 IF SERVERPROPERTY(servername) <> 新服务器名称替换 BEGIN DECLARE server_name NVARCHAR(128) SET server_name 新服务器…...
单例模式、工厂模式 c++关键字 static
static 关键字的作用: 主要作用在于 控制变量或函数的作用域、生命周期以及它们如何被不同部分的程序访问,从而帮助程序员管理内存、避免命名冲突,并实现特定的设计模式(如单例模式)。 1. 静态局部变量:当…...
基于文本和图片输入的3D数字人化身生成技术解析
随着虚拟现实、增强现实和元宇宙等技术的飞速发展,对高度逼真且具有表现力的3D数字人化身的需求日益增长。传统的3D数字人生成方法往往需要依赖大量的3D数据集,这不仅增加了数据收集和处理的成本,还限制了生成的多样性和灵活性。为了克服这些挑战,我们提出了一种基于文本提…...
C语言 | Leetcode C语言题解之第150题逆波兰表达式求值
题目: 题解: int evalRPN(char** tokens, int tokensSize) {int n tokensSize;int stk[(n 1) / 2];memset(stk, 0, sizeof(stk));int index -1;for (int i 0; i < n; i) {char* token tokens[i];if (strlen(token) > 1 || isdigit(token[0])…...
API安全性的重要性及实施策略
在当今日益互联的世界中,API(应用程序编程接口)成为连接不同软件系统的关键桥梁。随着API的使用越来越广泛,其安全性问题也日益凸显。一个不安全的API可能会使企业数据和用户信息面临严重的风险。因此,确保API的安全性…...
现在Java行情不好可以转.net吗?
转向.NET开发可能是一个选择,但要注意以下几点。我这里有一套编程入门教程,不仅包含了详细的视频 讲解,项目实战。如果你渴望学习编程,不妨点个关注,给个评论222,私信22,我在后台发给你。 技术转…...
大文件word生成的处理与解决策略
前言 对于简单word文档的生成导出,java已经有着很多技术来进行处理,在有着相对固定的格式样板下,采用word模板导出相对会是比较好的选择。但是当数据量且包含大量图片后,采用模板导出就显得无力了,模板的缺点是无法应…...
unity3d:GameFramework+xLua+Protobuf+lua-protobuf,与服务器交互收发协议
概述 1.cs收发协议,通过protobuf序列化 2.lua收发协议,通过lua-protobuf序列化 一条协议字节流组成 C#协议基类 CSPacketBase,SCPacketBaseC#用协议基类 proto生成的CS类,基于这两个基类。分别为CSPacketBase是客户端发送至服…...
二刷算法训练营Day30 | 回溯算法(6/6)
目录 详细布置: 1. 回溯总结 2. 332. 重新安排行程 3. 51. N 皇后 4. 37. 解数独 详细布置: 1. 回溯总结 回溯是递归的副产品,只要有递归就会有回溯,所以回溯法也经常和二叉树遍历,深度优先搜索混在一起&#x…...
【车载AI音视频电脑】200万像素迷你一体机
产品主要特点: -设备安装方便简洁,可通过3M胶直接将设备粘 贴到车前挡风玻璃上 -支持IE预览,手机,PAD实时预览, 支持电脑客 户端实时预览功能 -内置2路模拟高清, 每路均可达到200万像素。另 外可扩充2路1080P模拟…...
齐普夫定律在循环神经网络中的语言模型的应用
目录 齐普夫定律解释公式解释图与公式的关系代码与图的分析结论 使用对数表达方式的原因1. 线性化非线性关系2. 方便数据可视化和分析3. 降低数值范围4. 方便参数估计公式详细解释结论 来自:https://zh-v2.d2l.ai/chapter_recurrent-neural-networks/language-model…...
如何在Android Studio上发布Flutter应用
发布Flutter应用到Android平台是一个多步骤的过程,涉及配置应用、生成签名密钥、配置Gradle文件、构建发布版本APK等步骤。本文将详细介绍这些步骤,帮助你顺利发布Flutter应用。 1. 准备你的应用 在发布之前,确保你的应用在开发环境中运行良…...
douyin-downloader:智能抖音视频全流程管理工具,让内容收集效率提升90%
douyin-downloader:智能抖音视频全流程管理工具,让内容收集效率提升90% 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader douyin-downloader是一款开源的抖音视频批量下载与管理工具&am…...
小红书数据采集系统深度探索:从技术原理到实战落地
小红书数据采集系统深度探索:从技术原理到实战落地 【免费下载链接】XiaohongshuSpider 小红书爬取 项目地址: https://gitcode.com/gh_mirrors/xia/XiaohongshuSpider 在当今数据驱动的时代,小红书作为内容丰富的社交平台,其数据价值…...
Shield CLI:MySQL 插件 vs phpMyAdmin:轻量 Web 数据库管理工具对比
phpMyAdmin 是 MySQL Web 管理的事实标准,1998 年发布至今,功能覆盖面极广。但在"查个数据、改个表、看看关系"这类日常场景下,它的部署成本和界面复杂度显得有些过重。Shield CLI MySQL 插件是一个 7MB 的单二进制 Web 客户端&…...
JPEGCamera嵌入式库:LS-Y201摄像头UART协议解析与蓝牙传输
1. JPEGCamera 库概述:面向 LS-Y201 模块的嵌入式 JPEG 图像采集与蓝牙传输框架JPEGCamera 是一个专为 LinkSprite LS-Y201 JPEG 摄像头模块设计的轻量级嵌入式软件库,其核心目标是在资源受限的 MCU 平台上(如 STM32F1/F4 系列、ESP32、nRF52…...
DeepSeek-R1-Distill-Qwen-7B创意写作展示:从诗歌到短篇小说
嗯,用户需要一篇关于DeepSeek-R1-Distill-Qwen-7B在创意写作方面效果展示的技术博客。根据标题和场景判断,这属于效果展示类文章,重点是通过实际案例展示模型在文学创作上的能力。 需要突出模型的创意写作效果,包括诗歌、微型小说…...
从晶体管到CPU:CMOS反相器延迟如何决定你的电脑主频
从晶体管到CPU:CMOS反相器延迟如何决定你的电脑主频 当你按下电脑电源键的瞬间,数十亿个晶体管在芯片上开始协同工作。这些微观开关的切换速度,直接决定了处理器主频的上限。而构成所有数字电路基础的CMOS反相器,其动态响应特性就…...
告别枯燥刷怪!用Python+大漠插件实现《功夫》游戏后台自动挂机(附完整源码)
用Python与大漠插件打造《功夫》游戏智能挂机系统 在角色扮演类游戏中,重复性的任务往往成为玩家体验的瓶颈。以经典游戏《功夫》为例,"考古"任务需要不断接取、放弃任务直至找到特定地点,再完成打怪流程。这种机械操作不仅耗时耗力…...
PyTorch 2.8镜像保姆级教程:RTX 4090D下模型量化工具AutoGPTQ实操
PyTorch 2.8镜像保姆级教程:RTX 4090D下模型量化工具AutoGPTQ实操 1. 环境准备与快速部署 在开始使用AutoGPTQ进行模型量化之前,我们需要确保PyTorch 2.8镜像环境已经正确部署。本镜像专为RTX 4090D 24GB显卡优化,预装了CUDA 12.4和所有必要…...
VoxCPM-1.5-WEBUI场景应用:智能客服、有声读物、教育视频配音
VoxCPM-1.5-WEBUI场景应用:智能客服、有声读物、教育视频配音 1. 开篇:语音合成技术的平民化革命 还记得那些机械感十足的AI语音吗?生硬的语调、奇怪的停顿、模糊的发音,让听众不得不竖起耳朵才能勉强听懂。如今,随着…...
手把手教你用STM32F405和SD卡,在阿里云物联网平台上实现OTA升级(MQTT协议详解)
STM32F405实战:基于SD卡与阿里云物联网平台的OTA升级全流程解析 当嵌入式设备部署在野外或工业现场时,固件升级往往成为工程师的噩梦。传统方式需要技术人员携带烧录器奔赴现场,不仅效率低下,在设备数量庞大或分布广泛时更是不切实…...
