A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王桂丽 中级黑马   /  2012-9-1 20:52  /  2174 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
自定义的一个数字转换成人民币大写的一个程序
*/

class  ConvertMoney
{

      private static final char[] data = new char[]{
                  '零','壹','贰','叁','肆','伍','陆','柒','捌','玖'
            };
      private static final char[] units = new char[]{
            '整','圆','拾','佰','仟','万','拾','佰','仟','亿','拾','佰','仟'
      };
      public static void main(String[] args)
  {

                      convert(101000001010L);
      }
      public static String convert(long money )
      {
            StringBuffer sbf = new StringBuffer();
            int unit = 0;
   sbf.insert(unit);
            while(money!=0)
            {
   
                 // sbf.insert(0,units[unit++]);
     // System.out.println(units[unit++]);
      System.out.println(sbf.insert(0,units[++unit]));
                  int number = money%10;
               
        System.out.println(sbf.insert(0, data[number]));
                  money /= 10;
            }

            return sbf.toString();
      }
}



疑问:所需转换的数字在long范围内,为什么编译还一直报错,提示过大的整数?

4 个回复

正序浏览
此问题已解决
回复 使用道具 举报
楼主的程序有两个错误:
1、sbf.insert(unit);这句应改为 sbf.insert(0,units[0]);
2、int number = money%10;应改为int number = (int) (money%10);
因为int number = money%10; //money是long型数据,用long型数据赋值给number是无法通过编译的
回复 使用道具 举报
    int number = money%10;
这个地方错了,money是long类型
你可以修改程序为下面这个


/*
自定义的一个数字转换成人民币大写的一个程序
*/

class  ConvertMoney
{

      private static final char[] data = new char[]{
                  '零','壹','贰','叁','肆','伍','陆','柒','捌','玖'
            };
      private static final char[] units = new char[]{
            '整','圆','拾','佰','仟','万','拾','佰','仟','亿','拾','佰','仟'
      };
      public static void main(String[] args){
                                 convert(101000001010L);
      }
      public static String convert(long money )
      {
            StringBuffer sbf = new StringBuffer();
            int unit = 0;
   sbf.insert(0,unit);
            while(money!=0)
            {
   
                 // sbf.insert(0,units[unit++]);
     // System.out.println(units[unit++]);
      System.out.println(sbf.insert(0,units[++unit]));
                  long number = money % 10;
               int number2 = (int)number;
        System.out.println(sbf.insert(0, data[number2]));
                  money /= 10;
            }

            return sbf.toString();
      }
}
回复 使用道具 举报
Demo.java:19: 错误: 对于insert(int), 找不到合适的方法
   sbf.insert(unit);
      ^
    方法 StringBuffer.insert(int,double)不适用
      (实际参数列表和形式参数列表长度不同)
    方法 StringBuffer.insert(int,float)不适用
      (实际参数列表和形式参数列表长度不同)
    方法 StringBuffer.insert(int,long)不适用
      (实际参数列表和形式参数列表长度不同)
    方法 StringBuffer.insert(int,int)不适用
      (实际参数列表和形式参数列表长度不同)
    方法 StringBuffer.insert(int,char)不适用
      (实际参数列表和形式参数列表长度不同)
    方法 StringBuffer.insert(int,boolean)不适用
      (实际参数列表和形式参数列表长度不同)
    方法 StringBuffer.insert(int,CharSequence,int,int)不适用
      (实际参数列表和形式参数列表长度不同)
    方法 StringBuffer.insert(int,CharSequence)不适用
      (实际参数列表和形式参数列表长度不同)
    方法 StringBuffer.insert(int,char[])不适用
      (实际参数列表和形式参数列表长度不同)
    方法 StringBuffer.insert(int,String)不适用
      (实际参数列表和形式参数列表长度不同)
    方法 StringBuffer.insert(int,Object)不适用
      (实际参数列表和形式参数列表长度不同)
    方法 StringBuffer.insert(int,char[],int,int)不适用
      (实际参数列表和形式参数列表长度不同)
Demo.java:26: 错误: 可能损失精度
                  int number = money%10;
                                    ^
  需要: int
  找到:    long
2 个错误
请按任意键继续. . .
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马