黑马程序员技术交流社区

标题: 关于取值范围的一点问题 [打印本页]

作者: 王桂丽    时间: 2012-9-1 20:52
标题: 关于取值范围的一点问题
/*
自定义的一个数字转换成人民币大写的一个程序
*/

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范围内,为什么编译还一直报错,提示过大的整数?

作者: 黑马-王言龙    时间: 2012-9-1 21:29
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 个错误
请按任意键继续. . .
作者: 孙沛    时间: 2012-9-1 21:43
    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();
      }
}

作者: 周兴华    时间: 2012-9-1 21:48
楼主的程序有两个错误:
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是无法通过编译的

作者: 王桂丽    时间: 2012-9-1 23:04
此问题已解决




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