Delphi中实现人民币数字转大写的函数

版权申诉
0 下载量 54 浏览量 更新于2024-10-05 收藏 11KB RAR 举报
资源摘要信息:"本资源主要针对Delphi编程环境下,实现人民币数字金额转为大写金额的功能。资源提供了相应的函数代码,经过测试验证,该函数可以正常工作。通过使用该资源,开发者可以快速地将用户输入的数字金额转换成中文大写金额,满足在中国市场进行财务处理和交易记录等场景的需求。" 知识点详细说明: 1. Delphi编程环境: Delphi是一种集成开发环境(IDE),由Embarcadero Technologies公司开发,广泛用于创建跨平台应用程序。它支持快速应用程序开发(RAD),提供了丰富的组件库,使得程序员可以快速构建Windows桌面和服务器端应用程序。Delphi采用面向对象的Pascal语言,被称为Object Pascal。 2. 人民币大写转换: 在中国的财务系统中,通常要求在填写支票、汇票等金融票据时,需要将数字金额转换成中文大写形式。大写金额的形式主要由以下几部分组成:数字的大写形式(壹、贰、叁等)、单位(元、角、分等)以及整数位与小数位之间的“整”字。对于金额中不存在的部分(如角和分),需要将这部分用“零”来占位,并且在金额为零时,需要使用“整”字。 3. Delphi下实现人民币数字到大写的函数: 该资源提供的函数,是在Delphi环境下编写的,用于将用户输入的数字金额转换为标准的中文大写金额。函数的工作原理通常涉及以下几个步骤: - 首先,对输入的数字进行验证,确保其符合金额格式要求。 - 然后,将数字金额的整数部分和小数部分分别处理。 - 接着,将整数部分的每一位数字转换为中文大写数字,并且加上相应的单位。 - 如果金额中包含小数部分,需要将其转换为中文大写的角和分。 - 最后,检查并添加必要的“零”和“整”字以完善格式。 4. 编程实现大写金额转换的注意事项: - 对于小数点后的“角”和“分”,如果数值为零,则需要以“零”作为占位。 - 数字0在大写金额中表示为“零”,但如果是金额的开头,且金额不为零时,则需要表示为“零元”。 - 如果金额是整数并且为零,则需要表示为“零元整”。 - 在大写金额中,不会有“二分”这样的表示,因为最小单位是“分”,所以如果小数点后只有“分”,则应该直接写出该数值。 - 数字转换过程中,对于“10”的大写表示应该是“拾”,而不是“壹零”。 5. 使用Delphi实现人民币数字转大写的优势: Delphi的强类型和面向对象特性使得实现人民币大写转换的函数更加安全和易于维护。利用Delphi提供的字符串处理和数字格式化功能,可以方便地将数字金额转换为中文大写金额。同时,由于Delphi的高效编译器和快速执行,这样的转换函数可以被集成到需要实时金额转换的应用程序中,提升用户体验。 6. 适用场景: Delphi编写的人民币大写转换函数广泛适用于需要处理金融交易的软件,例如财务软件、银行系统、电子支付系统、在线商城以及各类需要生成财务票据的应用程序。它可以帮助开发者减少重复性代码的编写,加快开发进度,并且保证金额转换的准确性和符合规定格式。 7. 使用限制和建议: 在使用该资源提供的函数时,开发者需要考虑到不同国家和地区可能对金额表示有着不同的规定。例如,有些地区可能允许使用符号“.”表示小数,而不是“角”和“分”。因此在具体实施前,应当详细调研当地的财务规定,并对函数进行相应的调整和测试。 综上所述,DX_RMB.rar资源为Delphi环境下开发人员提供了一个经过测试的人民币数字转大写金额的函数,有效解决了在编写财务类应用程序时对金额进行格式化的需求,是处理人民币大写金额转换的有效工具。

下段代码 可以拖动,但缩放和旋转时会闪退,请改正 public boolean onTouchEvent(MotionEvent event) { switch (event.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: // 手指压下屏幕 mode = MODE.DRAG; // 查找被点击的图片 int index = event.getActionIndex(); float x = event.getX(index); float y = event.getY(index); CustomBitmap clickedBitmap = findClickedBitmap(x, y); if (clickedBitmap != null) { // 切换操作对象 _bitmaps.remove(clickedBitmap); _bitmaps.add(clickedBitmap); // 记录ImageView当前的移动位置 currentMatrix.set(clickedBitmap.matrix); clickedBitmap.matrix.set(currentMatrix); clickedBitmap.startPoint.set(x, y); _curCustomBitmap = clickedBitmap; } postInvalidate(); break; case MotionEvent.ACTION_POINTER_DOWN: // 当屏幕上还有触点(手指),再有一个手指压下屏幕 mode = MODE.ZOOM; // 记录位图的旋转角度和缩放倍数 _curCustomBitmap.oldRotation = rotation(event); _curCustomBitmap.startDis = distance(event); if (_curCustomBitmap.startDis > 10f) { // 获取缩放中心点的坐标 float x1 = event.getX(0); float y1 = event.getY(0); float x2 = event.getX(1); float y2 = event.getY(1); _curCustomBitmap.midPoint.set((x1 + x2) / 2, (y1 + y2) / 2); // 记录ImageView当前的缩放倍数 currentMatrix.set(_curCustomBitmap.matrix); } break; case MotionEvent.ACTION_MOVE: // 手指在屏幕移动,该事件会不断地触发 if (mode == MODE.DRAG) { // 移动图片 float dx = event.getX() - _curCustomBitmap.startPoint.x; float dy = event.getY() - _curCustomBitmap.startPoint.y; _curCustomBitmap.matrix.set(currentMatrix); _curCustomBitmap.matrix.postTranslate(dx, dy); } else if (mode == MODE.ZOOM) { // 缩放和旋转图片 float endDis = distance(event); float rotation = rotation(event) - _curCustomBitmap.oldRotation; if (endDis > 10f) { float scale = endDis / _curCustomBitmap.startDis; _curCustomBitmap.matrix.set(currentMatrix); _curCustomBitmap.matrix.postScale(scale, scale, _curCustomBitmap.midPoint.x, _curCustomBitmap.midPoint.y); _curCustomBitmap.matrix.postRotate(rotation, _curCustomBitmap.midPoint.x, _curCustomBitmap.midPoint.y); } } break; case MotionEvent.ACTION_POINTER_UP: // 有手指离开屏幕,但屏幕还有触点(手指) mode = MODE.NONE; break; } invalidate(); return true;

2023-06-06 上传

请优化代码,以下代码无法释放焦点 ,不能变换拖动目标 public boolean onTouchEvent(MotionEvent event) { switch (event.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: // 手指压下屏幕 mode = MODE.DRAG; // 寻找被点击的图片 CustomBitmap clickedBitmap = null; for (CustomBitmap bitmap : _bitmaps) { float[] values = new float[9]; bitmap.matrix.getValues(values); float globalX = values[Matrix.MTRANS_X]; float globalY = values[Matrix.MTRANS_Y]; float width = values[Matrix.MSCALE_X] * bitmap.getBitmap().getWidth(); float height = values[Matrix.MSCALE_Y] * bitmap.getBitmap().getWidth(); Rect rect = new Rect((int) globalX, (int) globalY, (int) (globalX + width), (int) (globalY + height)); if (rect.contains((int) event.getX(), (int) event.getY())) { clickedBitmap = bitmap; break; } } // 切换操作对象 if (clickedBitmap != null) { _bitmaps.remove(clickedBitmap); _bitmaps.add(clickedBitmap); currentMatrix.set(clickedBitmap.matrix);// 记录ImageView当前的移动位置 clickedBitmap.matrix.set(currentMatrix); clickedBitmap.startPoint.set(event.getX(), event.getY()); _curCustomBitmap = clickedBitmap; } postInvalidate(); break; case MotionEvent.ACTION_POINTER_DOWN: // 当屏幕上还有触点(手指),再有一个手指压下屏幕 mode = MODE.ZOOM; _curCustomBitmap.oldRotation = rotation(event); _curCustomBitmap.startDis = distance(event); if (_curCustomBitmap.startDis > 10f) { _curCustomBitmap.midPoint = mid(event); currentMatrix.set(_curCustomBitmap.matrix);// 记录ImageView当前的缩放倍数 } break; case MotionEvent.ACTION_MOVE: // 手指在屏幕移动,该事件会不断地触发 if (mode == MODE.DRAG) { float dx = event.getX() - _curCustomBitmap.startPoint.x;// 得到在x轴的移动距离 float dy = event.getY() - _curCustomBitmap.startPoint.y;// 得到在y轴的移动距离 _curCustomBitmap.matrix.set(currentMatrix);// 在没有进行移动之前的位置基础上进行移动 _curCustomBitmap.matrix.postTranslate(dx, dy); } else if (mode == MODE.ZOOM) {// 缩放与旋转 float endDis = distance(event);// 结束距离 _curCustomBitmap.rotation = rotation(event) - _curCustomBitmap.oldRotation; if (endDis > 10f) { float scale = endDis / _curCustomBitmap.startDis;// 得到缩放倍数 _curCustomBitmap.matrix.set(currentMatrix); _curCustomBitmap.matrix.postScale(scale, scale, _curCustomBitmap.midPoint.x, _curCustomBitmap.midPoint.y); _curCustomBitmap.matrix.postRotate(_curCustomBitmap.rotation, _curCustomBitmap.midPoint.x, _curCustomBitmap.midPoint.y); } } break; case MotionEvent.ACTION_UP: // 手指离开屏 break; case MotionEvent.ACTION_POINTER_UP: // 有手指离开屏幕,但屏幕还有触点(手指) mode = MODE.NONE; break; } invalidate(); return true; }

2023-06-06 上传

以下代码 ,拖动功能正常,但是在用两根手指进行缩放和旋转时闪退,请您完善 。public boolean onTouchEvent(MotionEvent event) { switch (event.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: // 手指压下屏幕 mode = MODE.DRAG; // 查找被点击的图片 int index = event.getActionIndex(); float x = event.getX(index); float y = event.getY(index); CustomBitmap clickedBitmap = findClickedBitmap(x, y); if (clickedBitmap != null) { // 切换操作对象 _bitmaps.remove(clickedBitmap); _bitmaps.add(clickedBitmap); // 记录ImageView当前的移动位置 currentMatrix.set(clickedBitmap.matrix); clickedBitmap.matrix.set(currentMatrix); clickedBitmap.startPoint.set(x, y); _curCustomBitmap = clickedBitmap; } postInvalidate(); break; case MotionEvent.ACTION_POINTER_DOWN: // 当屏幕上还有触点(手指),再有一个手指压下屏幕 mode = MODE.ZOOM; // 记录位图的旋转角度和缩放倍数 if (_curCustomBitmap == null) { return true; } _curCustomBitmap.oldRotation = rotation(event); _curCustomBitmap.startDis = distance(event); if (_curCustomBitmap.startDis > 10f) { // 获取缩放中心点的坐标 float x1 = event.getX(0); float y1 = event.getY(0); float x2 = event.getX(1); float y2 = event.getY(1); _curCustomBitmap.midPoint.set((x1 + x2) / 2, (y1 + y2) / 2); // 记录ImageView当前的缩放倍数 currentMatrix.set(_curCustomBitmap.matrix); } break; case MotionEvent.ACTION_MOVE: // 手指在屏幕移动,该事件会不断地触发 if (mode == MODE.DRAG) { // 移动图片 if (_curCustomBitmap == null) { return true; } float dx = event.getX() - _curCustomBitmap.startPoint.x; float dy = event.getY() - _curCustomBitmap.startPoint.y; _curCustomBitmap.matrix.set(currentMatrix); _curCustomBitmap.matrix.postTranslate(dx, dy); } else if (mode == MODE.ZOOM) { // 缩放和旋转图片 if (_curCustomBitmap == null) { return true; } float endDis = distance(event); float rotation = rotation(event) - _curCustomBitmap.oldRotation; if (endDis > 10f) { float scale = endDis / _curCustomBitmap.startDis; _curCustomBitmap.matrix.set(currentMatrix); _curCustomBitmap.matrix.postScale(scale, scale, _curCustomBitmap.midPoint.x, _curCustomBitmap.midPoint.y); _curCustomBitmap.matrix.postRotate(rotation, _curCustomBitmap.midPoint.x, _curCustomBitmap.midPoint.y); } } break; case MotionEvent.ACTION_POINTER_UP: // 有手指离开屏幕,但屏幕还有触点(手指) mode = MODE.NONE; break; } invalidate(); return true; } // 查找被点击的图片 private CustomBitmap findClickedBitmap(float x, float y) { for (CustomBitmap bitmap : _bitmaps) { float[] values = new float[9]; bitmap.matrix.getValues(values); float globalX = values[Matrix.MTRANS_X]; float globalY = values[Matrix.MTRANS_Y]; float width = values[Matrix.MSCALE_X] * bitmap.getBitmap().getWidth(); float height = values[Matrix.MSCALE_Y] * bitmap.getBitmap().getHeight(); RectF rect = new RectF(globalX, globalY, globalX + width, globalY + height); if (rect.contains(x, y)) { return bitmap; } } return null; } // 计算两点之间的距离 private float distance(MotionEvent event) { float x1 = event.getX(0); float y1 = event.getY(0); float x2 = event.getX(1); float y2 = event.getY(1); return (float) Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)); } // 计算两点之间的旋转角度 private float rotation(MotionEvent event) { float x1 = event.getX(0); float y1 = event.getY(0); float x2 = event.getX(1); float y2 = event.getY(1); double radians = Math.atan2(y2 - y1, x2 - x1); return (float) Math.toDegrees(radians); }

2023-06-06 上传