黑马程序员技术交流社区
标题:
如何保留小数后两位?
[打印本页]
作者:
陈中岩
时间:
2013-4-16 05:36
标题:
如何保留小数后两位?
本帖最后由 陈中岩 于 2013-4-16 12:26 编辑
我的问题是保留一个小数的后两位,而不是小数点的后两位。我早上1点就起床思索这个问题,就是不知道怎么办。
我也有过想法
//思想:先获取这个数的整数位,然后这个数减去整数位,得到的是0.xxxxxxx
//1,转换成字符串,然后反转就是xxxxxxx.0,取出前两位
//2,取出后再反转
//乘以0.1的这个数组长度-2次幂
//得出的数即可
class MathTest2
{
public static void main(String[] args)
{
LastTwo(3.12345);
}
public static void LastTwo(double d)
{
//取得这个数的整数位i
double i = Math.floor(d);
//转换成整型
sop("测试i="+i);
int l = (int)Math.round(i);
sop("测试l="+l);
//取得这个整数的小数部分xs
double xs = (d-l);
sop("测试xs="+xs);
//转换成字符串
//String s = new Double(xs).toString();
//char[] chs = s.toCharArray();
//TreeSet<String> ts = new TreeSet<String>(Collections.reverseOrder(s));
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
复制代码
但是:测试i=3.0
测试l=3
测试xs=0.12345000000000006
为啥xs是0.12345000000000006???
求高人指点一二。
再明确一下我想要的:比如输入3.12345得出的结果是0.00045
作者:
本人已死
时间:
2013-4-16 07:40
由于Java的简单类型不能够精确的对浮点数进行运算,简单的说就是计算机存的小数是以分数的形式存的,在我们调用的时候如果这个分数出现循环就会损失精度。在商业计算中我们要用 java.math.BigDecimal
所以
//取得这个整数的小数部分xs
double xs = (d-l);
sop("测试xs="+xs);
输出为错误的
作者:
陈圳
时间:
2013-4-16 09:13
double d=3.141592;
double c=d-(int)3.141594;小数部份
d=(int)3.141592;
d+=((int)(c*100))/100;留几位就*几位的整数.通过设置这个,可以随意保留任意位数.
作者:
陈圳
时间:
2013-4-16 09:23
double d=3.141523;
StringBuilder num=new StringBuilder(new Double(d).toString());
int index=num.indexOf(".");
d=Double.parseDouble(num.delete(index+1, num.length() - 2).toString());
System.out.println(d);
复制代码
//3.23你要的是这个结果吧,刚开始没仔细看题目
作者:
黄玉昆
时间:
2013-4-16 12:38
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2