关于Java中钱的转换

这里只说人民币,也就是用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:好像有点儿漏洞,没有完全校验输入数据的合法性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值