黑马程序员技术交流社区

标题: 如何将数字转化为字符 [打印本页]

作者: faith    时间: 2014-4-14 14:10
标题: 如何将数字转化为字符
如何将 数字转化为字符  如  13 转化为 拾叁

作者: ___________゛M    时间: 2014-4-14 14:37
数字转化为字符很好转啊  如“:  13 + ”“; 就成字符类型的了 。
如你说的将  13 转化为 拾叁
思路是:首先你要遍历数字的长度 , 然后才知道它是几位数,权是多少 。再 配上相应的单位,如百千等 。 加上相应的汉字类型的数字。
作者: ___________゛M    时间: 2014-4-14 14:38
如果是字符串类的数字,转化为int型的数字, 中间是相差48的 。 也就是说 ‘1’-48 就得到int型的 1 了。
作者: faith    时间: 2014-4-14 15:54
那显示小数点的呢?
作者: SyouRai_Tsk    时间: 2014-4-14 19:33
思路:定义数组存储数字所对应的中文字,然后数字长度是多少,然后一位一位取出来,接着把数字放到所对应的位置
作者: alucard    时间: 2014-4-14 21:21
关键代码:
int number = 1032546;


  String str = number+"";
  char c[]={'零','一','二','三','四','五','六','七','八','九'};
  for(int i=0;i<str.length();i++){
    String s = str.substring(i,i+1);
    System.out.print(c[Integer.parseInt(s)]);
  }


作者: 杨庆雷    时间: 2014-4-14 22:06
  1. public static void main(String[] args) {
  2.                
  3.                 char s = '1';
  4.                 String t = String.valueOf(s);
  5.                 int b =Integer.parseInt(t);
  6.                
  7.                 System.out.println(b);
  8.         }
  9.        
复制代码


作者: faith    时间: 2014-4-15 08:11
如要显示小数点以后的位数呢?
作者: jzxyhjl    时间: 2014-4-15 09:14
  1. package test;

  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.Iterator;
  5. import java.util.List;
  6. import java.util.Map;

  7. public class ChangeNum2 {
  8.         //定义一个字符集
  9.         private Map<String,String> map = new HashMap<String,String>();
  10.         //定义一个单位集
  11.         private List<String> unitList = new ArrayList<String>();
  12.        
  13.         public ChangeNum2(){
  14.                 //将字符集进行初始化
  15.                 map.put("1", "壹");
  16.                 map.put("2", "贰");
  17.                 map.put("3", "叁");
  18.                 map.put("4", "肆");
  19.                 map.put("5", "伍");
  20.                 map.put("6", "陆");
  21.                 map.put("7", "柒");
  22.                 map.put("8", "捌");
  23.                 map.put("9", "玖");
  24.                 map.put("0", "零");
  25.                 map.put(".", "点");
  26.                 //将单位集初始化
  27.                 unitList.add("拾");
  28.                 unitList.add("佰");
  29.                 unitList.add("仟");
  30.                 unitList.add("万");
  31.                 unitList.add("拾");
  32.                 unitList.add("佰");
  33.                 unitList.add("仟");

  34.         }
  35.        
  36.         //将double转换成大写数字输出,数字长度仅限double
  37.         public String change(double num){
  38.                 String s = "";
  39.                 //获取整个数字的长度(包括小数点)
  40.                 int length = String.valueOf(num).length();
  41.                 int intLength = 0;
  42.                 //将传进来的double数转换成String[]
  43.                 String[] numArr = String.valueOf(num).split("");
  44.                 List<String> list = new ArrayList<String>();
  45.                 //初步转换成不带任何单位的大写数字(包括小数点)
  46.                 for(int i=1;i<=length;i++){
  47.                        
  48.                         if(".".equals(numArr[i])){
  49.                                 //获取整数位数
  50.                                 intLength = i-1;
  51.                                 list.add(map.get("."));
  52.                                 i++;
  53.                         }
  54.                         list.add(map.get(numArr[i]));
  55.                 }
  56.                 //为大写数字添加上单位
  57.                 list = fitUp(list,intLength);
  58.                
  59.                 Iterator it = list.iterator();
  60.                 while(it.hasNext()){
  61.                         s = s+it.next();
  62.                 }
  63.                 return s;
  64.         }
  65.         //为大写数字添加单位
  66.         private List<String> fitUp(List<String> list,int intLength){
  67.                 List<String> newList = new ArrayList<String>();

  68.                 for(int i=0;i<list.size();i++){
  69.                         //对整数位的零进行摘除
  70.                         if(intLength>1){
  71.                                 if(!"零".equals(list.get(i))){
  72.                                         newList.add(list.get(i)+unitList.get(intLength-2));
  73.                                 }else{
  74.                                         if(intLength==5){
  75.                                                 newList.add(unitList.get(intLength-2));
  76.                                         }
  77.                                 }
  78.                                 intLength--;
  79.                         //保留个位和小数部分       
  80.                         }else{
  81.                                 newList.add(list.get(i));
  82.                         }
  83.                 }
  84.                
  85.                 //当小数是.00时去掉多余的零
  86.                 if("零".equals(newList.get(newList.size()-1))&&"点".equals(newList.get(newList.size()-2))){
  87.                         newList.remove(newList.size()-1);
  88.                         newList.remove(newList.size()-1);
  89.                         if("零".equals(newList.get(newList.size()-1))){
  90.                                 newList.remove(newList.size()-1);
  91.                         }
  92.                 }
  93.                 return newList;
  94.         }
  95.        
  96.        
  97.         public static void main(String[] args) {
  98.                
  99.                 ChangeNum2 cn2 = new ChangeNum2();
  100.                 double d = 101.601;
  101.                
  102.                 System.out.println("原数字为"+d);
  103.                
  104.                 String s = cn2.change(d);
  105.                
  106.                 System.out.println("转换后为"+s);
  107.         }
  108. }
复制代码


不知道这个符不符合你说的要求,不过还有些细节没有做到,比如101应该显示“壹佰零壹”,但是这段代码只会显示“壹佰壹”
作者: 攀攀    时间: 2014-4-15 13:56
jzxyhjl 发表于 2014-4-15 09:14
不知道这个符不符合你说的要求,不过还有些细节没有做到,比如101应该显示“壹佰零壹”,但是这段代码只 ...

不能不说好厉害的说 求指导
作者: 微笑=.一瞬间    时间: 2014-4-16 22:55
这是我写的一个程序部知道符不符合你的要求
package com.itheima;

/**
* 第1题: 从键盘接受一个数字,列出该数字的中文表示格式,例如:键盘输入123,打印出一二三;键盘输入3103,打印出三一零三。
*/
import java.util.Scanner;

public class Test1 {
        public static void main(String[] args) {
                System.out.println("请输入数字");
                Scanner scanner=new Scanner(System.in);//接收从键盘录入的信息
                int num=scanner.nextInt();//将录入的信息转换成int类型
                System.out.println("打印:");
                System.out.println(translate(num));
        }
        //translate(int num){}函数实现将数字转换成相应的汉字
        public static String translate(int num){
                String s=num+"";
                s=s.replace("0", "零");
                s=s.replace("1", "一");
                s=s.replace("2", "二");
                s=s.replace("3", "三");
                s=s.replace("4", "四");
                s=s.replace("5", "五");
                s=s.replace("6", "六");
                s=s.replace("7", "七");
                s=s.replace("8", "八");
                s=s.replace("9", "九");
                return s;
        }
}
作者: faith    时间: 2014-4-17 08:26
微笑=.一瞬间 发表于 2014-4-16 22:55
这是我写的一个程序部知道符不符合你的要求
package com.itheima;

带小数点小数点的如何写?
作者: Без_тебя    时间: 2014-6-12 22:08
public static void main(String[] args) {
                int num = 153513;
                List<String> list = new ArrayList<String>();
                Map<Integer,String> c =new HashMap<Integer,String>();
                Map<Integer,String> d =new HashMap<Integer,String>();
                c.put(0 ,"");
                c.put(1 ,"壹");
                c.put(2 ,"贰");
                c.put(3 ,"叁");
                c.put(4 ,"肆");
                c.put(5 ,"伍");
                c.put(6 ,"陆");
                c.put(7 ,"柒");
                c.put(8 ,"捌");
                c.put(9 ,"玖");
               
                d.put(2 ,"拾");
                d.put(3 ,"佰");
                d.put(4 ,"仟");
                d.put(5 ,"万");
                d.put(6 ,"拾");
                d.put(7 ,"佰");
                d.put(8 ,"仟");
                d.put(9 ,"亿");
               
               
                while(num!=0){
                        int j = num%10;
                        String str = c.get(j);
                        list.add(str);
                       
                        num/=10;
                }
                for(int i=0;i<=list.size()-1;i++){
                        System.out.print(list.get(list.size()-i-1));
                        String str2 = d.get(list.size()-i);
                        if(str2!=null)
                                System.out.print(str2);
                }
        }
作者: 焦国军    时间: 2014-6-13 02:59
定义String数组,数组的下标和数组内的汉字数字意义对应




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2