数字转人民币读法

han_list=["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"]
unit_list=["拾","佰","仟"]
#把整数部分和小数部分转化为字符串,并存入元组作为返回值
def devide(num):
    integer=int(num)#整数部分
    fraction=round((num-integer)*100)#小数部分  #若小数部分小于10要在前面加零
    if fraction<10:
        return(str(integer),"0"+str(fraction))
    return (str(integer),str(fraction))

#每四位数字转化为人民币读法
def four_to_hanstr(num_str):
    result=""#记录人民币读法
    num_len=len(num_str)
    for i in range(num_len):
        num=int(num_str[i])      #若有两个0连用,只读一个0;
        if i!=num_len-1 and num_str[i]=="0" and num_str[i+1]=="0":
            pass
        else:
            if i !=num_len-1 and num !=0:
                    result+=han_list[num]+unit_list[num_len-2-i]
            else:          #最后一位是0不需要读
                if num_str[-1]=="0":
                    return result
                result+=han_list[num]
    return result

#小数部分转人民币读法
def frac_to_hanstr(num_str):
    result=""
    num_len=len(num_str)
    for i in range(num_len):
        num=int(num_str[i])
        result+=han_list[num]
    return result
#整数部分转人民币读法
def integer_to_str(num_str):
    str_len=len(num_str)
    if str_len>12:
        print("数字太大,翻译不了")
        return
    elif str_len>8:
        return four_to_hanstr(num_str[:-8])+"亿"+four_to_hanstr(num_str[-8:-4])+"万"
        +four_to_hanstr(num_str[-4:])
    elif str_len>4:
        return four_to_hanstr(num_str[:-4])+"万"+four_to_hanstr(num_str[-4:])
    else:
        return four_to_hanstr(num_str)

#程序数据测试
num=float(input("请输入一个浮点数>>>"))
integer,fraction=devide(num)
integer_to_han_str=integer_to_str(integer)
fraction_to_han_str=frac_to_hanstr(fraction)
han_str=integer_to_han_str+"点"+fraction_to_han_str+"元"
print(han_str)

  

原文地址:https://www.cnblogs.com/zhanghua-322/p/11351385.html

时间: 2024-10-12 17:00:09

数字转人民币读法的相关文章

千亿级别数字的人民币读法

</pre><pre name="code" class="java">package com.sungeo; /** * 人民币的读法是四位一节: x仟x百x拾 x (亿) x仟x百x拾 x (万) x仟x百x拾 x * @author Administrator */ public class NumToRmb { private String[] hanArr=new String[]{"零","壹&quo

Python学习之--数字转人民币读法(解决问题的方法很重要)

效果图: 实现代码: money = float(input("Please input the money:"))cop = int(money)Num = ['零','壹','贰','叁','肆','伍','陆','柒','捌','镹']#用于存转换后的汉字UnitZ = ['','仟','佰','十']#存转换需要的单位(4数字一循环)Integer = []#存整数部分每一位数字Decimal = []#存小数部分每一位数字(一共两位,精确到分)Zheng = copXiao

Java浮点数转人民币读法

把[整数部分]的数字,由个位开始,4个数字分为一组,最高位没有数字就补0,并记录总共的数组个数,总共有3组,也就3*4的二维数组: 对于每个数组统一处理,最后将最开头的"零去掉",将"亿"."万""元"字前面的"零"去掉: 当读取到0时,检查它的上一位是否为0,如果上一位是0,则不做处理,如果上一位不是0或者上一位不存在,均记下"零": 读取每个数字,转换为对应的大写汉字,并加上权重&q

java实战1——浮点数转人民币读法

为了学习安卓,现在开始从C++角度来学习Java,现在看到了<疯狂java讲义>的第四章,里面有个字符串转人民币的例子,书上没做完,于是把其补充完善.其中最难的部分就是根据零在不同位置,具有不同行为.按照中文读法,有些零要读出,有些零不需要读出.下面将按照两部分进行讲解,首先举一个例子来说明思路,其次给出Java的源代码供参考,并且进行测试.这个问题主要利用字符串数组来解决.我们假定要转换的浮点数整数部分不超过12位. (1) 思路 1.1 分割整数和小数部分 对于一个浮点数,先来看个简单点,

java程序---将一个浮点数转换成人民币读法

代码如下: <span style="font-size:18px;">package test; import java.util.Scanner; //将输入的浮点型钱数,转成人民币读法 public class Num2Rmb { private static double num; private long zheng,xiao; private String[] hanArr={"零","壹","贰",&

ORACLE数字转换人民币大写

ORACLE数字转换人民币大写     示例.   数字                        :            183066999230.68 人民币大写            :            壹仟捌佰参拾亿零陆仟陆佰玖拾玖万玖仟贰佰参拾圆陆角捌分   数字                        :            999900000000 人民币大写            :            玖仟玖佰玖拾玖亿圆整     Step 1.  Cre

数字转人民币大写(SQL SERVER)

--数字转人民币大写NumToRMB ---新建方法create  FUNCTION dbo.NumToRMB (@num numeric(14,5))   RETURNS varchar(100) WITH ENCRYPTION   AS   BEGIN     DECLARE @n_data VARCHAR(20),@c_data VARCHAR(100),@n_str VARCHAR(10),@i int     SET @n_data=RIGHT(SPACE(14)+CAST(CAST(

数学数字转中文读法(1000000以内)

1 public function numToWrite($num){ 2 if($num>1000000){ 3 return '输入的数字不符合要求'; 4 } 5 $writeList=['零','一','二','三','四','五','六','七','八','九']; 6 $unitList=['十','百','千','万']; 7 $writeDec=''; 8 if(!is_int($num)){ 9 $writeDec='点'; 10 $decimal=explode('.',(s

js实现小写转大写,js实现数字转人民币

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>小写转大写</title> <style type="text/css"> div { position:absolute;left:lin;top:lin;bottom:lin;right:lin; background-col