先说自己的问题:写人民币大小写转换时碰到一个问题,本意是想double保留2 为小数以后再转换成String,对于每个字符进行加单位处理danwei(j),但是转换后位数太多,导致 j 出现越界错误:
String danwei="千百拾亿千百拾万千百拾元角分";
double inNUM;
String in =String.valueOf(inNUM*100);
解决方法:
long l=Math.round(inNUM*100);//这里要转化成long,否则double的999999999999.99会出错!
String in =String.valueOf(l);
原因分析:
Java 中 long 是一个整数基本类型, 长度为64bits, 即8字节.而double是小数;带小数点的double转long型必定会造成数据变化,也就是取整。--这样才是我想要的结果。过程中尝试了
java.text.DecimalFormat dFormat=new java.text.DecimalFormat("#.00");
dFormat.format(inNUM);
几种把double保留两位小数的方法都没能解决问题。
总结:
1.java中long是长整型,可以用来对double取整;
2.关于String、String.valueOf、toString区别的思考:
(1)String用来进行强制类型转换。它只能转换本身就是字符串的,非String类型转换会报错。
(2)toString():这是object类就有的方法,所有的类都继承object,也就是所有类都有这个方法,而且必须重载这个方法来实现对自己所加的属性的字符串转换,即所有对象都能调用这个方法(你代码不写错的情况下),但是注意,如果参数为空,会报空指针异常。
(3)String.Valueof():定义的时候对空字符串进行了处理:
public
static
String valueOf(Object obj){
return
(obj==
null
) ?
"null"
: obj.toString()};
不会报空指针异常。
推荐使用String.Valueof()。
关于String.Valueof()重载的多种方法:
String 类别中已经提供了将基本数据型态转换成 String 的 static 方法,
有下列几种 :
String.valueOf(boolean b) : 将 boolean 变量 b 转换成字符串
String.valueOf(char c) : 将 char 变量 c 转换成字符串
String.valueOf(char[] data) : 将 char 数组 data 转换成字符串
String.valueOf(char[] data, int offset, int count) :
将 char 数组 data 中 由 data[offset] 开始取 count 个元素 转换成字符串
String.valueOf(double d) : 将 double 变量 d 转换成字符串
String.valueOf(float f) : 将 float 变量 f 转换成字符串
String.valueOf(int i) : 将 int 变量 i 转换成字符串
String.valueOf(long l) : 将 long 变量 l 转换成字符串
String.valueOf(Object obj) : 将 obj 对象转换成 字符串, 等于 obj.toString()