这里只说人民币,也就是用10进制的。
另外,关于货币,钱方面的问题,目前的JDK中没有提供专门的API。有个JSR-354,但是现在并没有进入JDK。
那么,先说说问题怎么来的。
在做一个各人项目中,需要将输入的钱数(元为单位,String类型)换算成分。
这个小学生都会,直接乘100就行了。所以用了如下的代码:
String yuan="100";
int fen=(int)(Double.valueOf(yuan).doubleValue()*100);
结果当然是10000了。
但是问题没有这么简单,如果是”8.04"元呢?
答案是:803分。
问题出在这里:Double.valueOf("8.04")的结果是8.0399999999999999,很显然,这是由于用二进制无法精确表示小数造成的。
我只好写了这个来解决:
public static int yuanToFen(String x)
{
String yuan = null;
String fen = null;
if (x == null || x.isEmpty())
{
return 0;
}
if (x.contains("."))
{
int index = x.indexOf('.');
if (x.length() == (index+1))
{
x = x + "00";
} else if (x.length() == (index + 2))
{
x = x + "0";
} else if (x.length() == (index + 3))
{
}else
{
x=x.substring(0,index+3);
}
yuan = x.substring(0, index);
fen = x.substring(index + 1, index+3);
} else
{
yuan = x;
fen = "0";
}
if (yuan == null || yuan.length() <= 0)
{
yuan = "0";
}
if (fen == null || fen.length() <= 0)
{
fen = "0";
}
return Integer.valueOf(yuan).intValue() * 100 + Integer.valueOf(fen).intValue();
}
自己玩,这样也就可以了。
ps:好像有点儿漏洞,没有完全校验输入数据的合法性。