Java小数点保留问题
2016-09-10 10:13
253 查看
前几天在先笔试的时候遇到一个保留两位小数点的问题,算法很简单,但是保留小数却不知道怎么写,所以在此记录一下。
Java中小数保留有很多种写法,在网上找到了几种比较常用的方法。
输出结果:
f1:
3.14
3.142
3.1416
3.14159
DecimalFormat 包含一个模式 和一组符号
符号含义:
0 一个数字
# 一个数字,不包括 0
- 缺省负数前缀。
. 小数的分隔符的占位符
, 分组分隔符的占位符
; 分隔格式。
% 乘以 100 和作为百分比显示
? 乘以 1000 和作为千进制货币符显示;用货币符号代替;如果双写,用
国际货币符号代替。如果出现在一个模式中,用货币十进制分隔符代
替十进制分隔符。
X 前缀或后缀中使用的任何其它字符,用来引用前缀或后缀中的特殊字符。
例子:
结果:
12.3
12.3
012.340
12.34
输出结果:
f3:
3.14
3.142
3.1416
输出结果:
f4:
3.14
完整代码:
Java中小数保留有很多种写法,在网上找到了几种比较常用的方法。
1、String.format()
这种方法应该是最好记的,把浮点数转化为字符串。static double d=3.1415926; /* * 方法一: * String.format */ static void f1(){ System.out.println("f1:"); System.out.println(String.format("%.2f", d)); System.out.println(String.format("%.3f", d)); System.out.println(String.format("%.4f", d)); System.out.println(String.format("%.5f", d)); }
输出结果:
f1:
3.14
3.142
3.1416
3.14159
2、DecimalFormat
DecimalFormat 是java.text包中 NumberFormat 的一个具体子类,用于格式化十进制数字。DecimalFormat 包含一个模式 和一组符号
符号含义:
0 一个数字
# 一个数字,不包括 0
- 缺省负数前缀。
. 小数的分隔符的占位符
, 分组分隔符的占位符
; 分隔格式。
% 乘以 100 和作为百分比显示
? 乘以 1000 和作为千进制货币符显示;用货币符号代替;如果双写,用
国际货币符号代替。如果出现在一个模式中,用货币十进制分隔符代
替十进制分隔符。
X 前缀或后缀中使用的任何其它字符,用来引用前缀或后缀中的特殊字符。
例子:
DecimalFormat df1 = new DecimalFormat("0.0"); DecimalFormat df2 = new DecimalFormat("#.#"); DecimalFormat df3 = new DecimalFormat("000.000"); DecimalFormat df4 = new DecimalFormat("###.###"); System.out.println(df1.format(12.34)); System.out.println(df2.format(12.34)); System.out.println(df3.format(12.34)); System.out.println(df4.format(12.34));
结果:
12.3
12.3
012.340
12.34
3、BigDecimal
System.out.println("f3:"); BigDecimal bd=new BigDecimal(d); double d1=bd.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); double d2=bd.setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue(); double d3=bd.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue(); System.out.println(d1); System.out.println(d2); System.out.println(d3);
输出结果:
f3:
3.14
3.142
3.1416
4、NumberFormat
System.out.println("f4:"); NumberFormat nf=NumberFormat.getNumberInstance(); nf.setMaximumFractionDigits(2); System.out.println(nf.format(d));
输出结果:
f4:
3.14
完整代码:
import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFormat; public class Format { static double d=3.1415926; /* * 方法一: * String.format */ static void f1(){ System.out.println("f1:"); System.out.println(String.format("%.2f", d)); System.out.println(String.format("%.3f", d)); System.out.println(String.format("%.4f", d)); System.out.println(String.format("%.5f", d)); } /* * 方法二: * DecimalFormat */ static void f2(){ System.out.println("f2:"); DecimalFormat df1=new DecimalFormat("#.00"); DecimalFormat df2=new DecimalFormat("0.00"); DecimalFormat df3=new DecimalFormat("00.00"); DecimalFormat df4=new DecimalFormat("##.#"); DecimalFormat df5=new DecimalFormat("0.0%"); System.out.println(df1.format(d)); System.out.println(df2.format(d)); System.out.println(df3.format(d)); System.out.println(df4.format(d)); System.out.println(df5.format(d)); } /* * 方法三: * BigDecimal */ static void f3(){ System.out.println("f3:"); BigDecimal bd=new BigDecimal(d); double d1=bd.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); double d2=bd.setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue(); double d3=bd.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue(); System.out.println(d1); System.out.println(d2); System.out.println(d3); } /* * 方法四: * NumberFormat */ static void f4(){ System.out.println("f4:"); NumberFormat nf=NumberFormat.getNumberInstance(); nf.setMaximumFractionDigits(2); System.out.println(nf.format(d)); } public static void main(String[] args) { f1(); f2(); f3(); f4(); } }
相关文章推荐
- java中double类型数组保留小数点后位数问题!!!!!
- java中小数点的保留问题
- java中double类型变量保留小数点后两位的问题
- java中double类型数组保留小数点后位数问题!!!!!
- java double保留小数点的零的问题,java保留小数点问题
- java保留小数点后两位的有关问题
- Java小数点位数保留问题
- java保留小数点后四舍五入的问题
- Oracle小数点保留问题
- java除法保留小数问题
- Java保留小数问题
- Oracle小数点保留的问题的的4个处理方案
- Java保留小数点后几位
- 小数点后几位的保留问题
- java中double四舍五入并设置小数点位数的问题
- word2003邮件合并后保留小数点位数问题
- java保留两位小数问题
- java保留两位小数问题
- java保留小数点后两位
- java处理保留小数点后几位