您的位置:首页 > 编程语言 > Java开发

用java编写一个程序,将浮点数转换成人民币读法字符串

2017-04-12 14:10 363 查看
题目出自李刚老师的《疯狂Java讲义(第二版)》第四章练习题2

编程思路:

        先将浮点数乘以100,强制转换为long型整数(用int会出现数据溢出),然后用得到后的整数依次除以10的(i)次幂,得到该整数第(i+1)位的数值,然后将中文读法字符串和单位按顺序排好,根据一些判定条件,给出相应的转换。

此处要注意的有:

1.本程序只考虑万亿级,万亿以上不考虑在内(即最大为9999,9999,9999.99);

2.高位为零时不予输出,直到第一个不为零的位开始输出(如0009,9999,9999.99前3个0不输出);

3.低位连续出现两个或两个以上零时,只读一个,且要亿级、萬级、圆级要带上相应单位

(如9990,0999.99会输出九千九百九十萬零九百九十九元九角九分);

public class Num2RMB

  {
  //定义一个输入的double数据
  public double input;

  //定义中文数字数组
  String[] chinese = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};

  //定义单位数组(单位按照位数从小到大来排序)
  String[ ] unit = {"分","角","圆","拾","佰","仟","萬","拾","佰","仟","亿","拾","佰","仟"};

  //定义一个构造器,初始化输入的double数据;
  public Num2RMB()
  {
    input = 9900090090.4687;
  }

    //编写转化方法,思路,将该数乘以100,再除以10的i次幂,再取整,如果结果不为零,则加上结果和单位;
  public void readInChinese(double input)

  {

    //此处a不能用int,会造成数据溢出,所用要用long,将double数乘以100,等到一个long数

    long a = (long)(input*100);

    int b;
    int count = 0;//用于记录当前位的上一位是否为0,默认亿亿位为0
    for (int i=13; i>=0; i--)
    {
      b = (int)(a/Math.pow(10.0, i));//b=a/10的b所在位数减1次幂
      if (b != 0)
      {
        a = (long)(a-b*Math.pow(10.0, i));//b不为0时,a=a去掉最高位数,为下一次转换做准备
        System.out.print(chinese+unit[i%14]);//输出数字和单位
      }
      else if (i%4 == 2 && i/2==1)//若b=0,则判断此位是否要输出圆
      {
        System.out.print(unit[i%14]);
        count = b;
      }
      else if (i%4 == 2)//判断是否要输出亿或者萬
      {
        System.out.print(unit[i%14]+chinese[b]);
      }
      else if (count !=0)//判断是否要输出零
      {
        System.out.print(chinese[b]);//当b=0时,若count!=0,则输出chinese[0],即零
        count = b;
      }
      else
      {
         //以上条件都不满足时,不打印
        count = b;
      }
    }
  }

//主程序入口,先创建对象,然后执行readInChinese方法
  public static void main(String[ ] args)

  {
    Num2RMB n = new Num2RMB();
    n.readInChinese(n.input);
  }

}

[b]新手入门,不对之处欢迎指正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐