如何把Java的double类型变量保留两位小数

发布于 2017/08/21 15:12
阅读 504
收藏 0
import java.text.DecimalFormat;

public class Test {
    public static void main(String[] args) {
        String str = "1.00";
        DecimalFormat df = new DecimalFormat("0.00");
        double d = Double.valueOf(str);
        double dd = 1.00;
        double ddd = 1.01;
        System.out.println(str);   // 1.00
        System.out.println(str instanceof String); // true
        System.out.println(d);  // 1.0
        System.out.println(dd); // 1.0
        System.out.println(ddd); // 1.01
        System.out.println(df.format(d)); // 1.00
        System.out.println(df.format(d) instanceof String); //true
    }
}

用DecimalFormat 是可以保留两位小数,但类型是String

Java对double小数点后如果有两个0,只会保留一个吗?

加载中
0
tcxu
tcxu

已知 双精度标量 f,  如果想以字符串形式输出,小数点后保留2位,可直接通过C语言的输出格式,System.out.printf("%.2f", f), 达到目的。

如果想要先转变成小数点后保留2位的双精度变量,然后再输出,可以尝试用 f 作参数,创建一个 BigDecimal 对象 b,再 调用 BigDeciaml 对象的 setScale 方法,以取得另一个 小数点后2位的新对象,最后,通过这个新对象,调用 方法:doubleValue(),  以取得双精度变量 f1. 最后,再输出 f1。

import java.math.*;

public class A {
public static void main(String args[]) { 
  double f = 111231.558564; 
  System.out.printf("直接将双精度的变量 f, 按C语言的输出格式输出:%.2f\n",f);  
  BigDecimal b = new BigDecimal(f);  
  double f1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
  System.out.println("f1 是小数点后只有两位的双精度类型数据:" + f1); // f1 是双精度类型 
	}
}  

输出是:

直接将双精度的变量 f, 按C语言的输出格式输出:111231.56
f1 是小数点后只有两位的双精度类型数据:111231.56

参考网页:

http://www.jb51.net/article/46010.htm

Kit_lee
Kit_lee
答案正解,计算是计算,输出是输出,用该楼的解决计算和精度问题,然后再用decimalformat解决输出显示问题即可
溱
如果double变量是1.00 输出的时候是1.0 ......
0
乌龟壳
乌龟壳
乌龟壳
回复 @溱 : 从邮箱跳过来点错了
溱
和ajax有毛关系?
0
MZHS
MZHS

String.format(),找找这个方法的用法,实在不行就自己实现吧

溱
回复 @tcxu : 恩,谢谢,这样的确是可以获得两位小数的double类型变量
tcxu
tcxu
回复 @溱 通过格式化方式,保留2位小数后,得到的是另一个 BigDecimal 的对象,不是你所说的String类型。接着,通过这个新对象,调用BigDecimal的方法:doubleValue(), 最终 转换成双精度的变量。详情见楼上 tcxu 给的代码。
Feng_Yu
Feng_Yu
回复 @溱 : BigDecimal的类提供了保留精度的方法。你可以先转成BigDecimal,然后保留两位小数输出
溱
以上通过格式化的方式获取两位小数后得到的是String类型啊 不是double类型了
0
两广总督bogang
两广总督bogang
System.out.println(dd);
这个最终就是去调用Double.toString()
高精度的加减乘除还是用BigDecimal吧.
返回顶部
顶部