`

DecimalFormat的几种用法!

阅读更多

 

   NumberFormat.getInstance()方法返回NumberFormat的一个实例(实际上是NumberFormat具体的一个子类,例如DecimalFormat), 这适合根据本地设置格式化一个数字。你也可以使用非缺省的地区设置,例如德国。然后格式化方法根据特定的地区规则格式化数字。这个程序也可以使用一个简单的形式:
NumberFormat.getInstance().format(1234.56)
但是保存一个格式然后重用更加有效。国际化是格式化数字时的一个大问题。
另一个是对格式的有效控制,例如指定小数部分的位数,下面是解决这个问题的一个简单例子:
import java.text.DecimalFormat;
import java.util.Locale;
public class DecimalFormat2 {
public static void main(String args[]) {
// 得到本地的缺省格式
DecimalFormat df1 = new DecimalFormat("####.000");
System.out.println(df1.format(1234.56));
// 得到德国的格式
Locale.setDefault(Locale.GERMAN);
DecimalFormat df2 = new DecimalFormat("####.000");
System.out.println(df2.format(1234.56));
}
}
在这个例子中设置了数字的格式,使用像"####.000"的符号。这个模式意味着在小数点前有四个数字,如果不够就空着,小数点后有三位数字,不足用0补齐。程序的输出:
1234.560
1234,560
相似的,也可以控制指数形式的格式,例如:
import java.text.DecimalFormat;
public class DecimalFormat3 {
public static void main(String args[]) {
DecimalFormat df = new DecimalFormat("0.000E0000");
System.out.println(df.format(1234.56));
}
}
输出:
1.235E0003
对于百分数:
import java.text.NumberFormat;
public class DecimalFormat4 {
public static void main(String args[]) {
NumberFormat nf = NumberFormat.getPercentInstance();
System.out.println(nf.format(0.47));
}
}
输出:
47%
至此,你已经看到了格式化数字的几个不同的技术。另一方面,如何读取并解析包含格式化的数字的字符串?解析支持包含在NumberFormat中。例如:
import java.util.Locale;
import java.text.NumberFormat;
import java.text.ParseException;
public class DecimalFormat5 {
public static void main(String args[]) {
// 本地格式
NumberFormat nf1 = NumberFormat.getInstance();
Object obj1 = null;
// 基于格式的解析
try {
obj1 = nf1.parse("1234,56");
}
catch (ParseException e1) {
System.err.println(e1);
}
System.out.println(obj1);
// 德国格式
NumberFormat nf2 =NumberFormat.getInstance(Locale.GERMAN);
Object obj2 = null;
// 基于格式的解析
try {
obj2 = nf2.parse("1234,56");
}
catch (ParseException e2) {
System.err.println(e2);
}
System.out.println(obj2);
}
}
这个例子分两部分,都是解析一个字符串:"1234,56"。第一部分使用本地格式解析,第二部分使用德国格式解析。当程序在美国运行,结果是:
123456
1234.56
换句话说,"1234,56"在美国被认为是一个巨大的整数"123456"而在德国被认为是一个小数"1234.56"。
3.4.    DecimalFormat 和 NumberFormat的联系
在上面的例子中, DecimalFormat 和 NumberFormat 都被使用了。DecimalFormat 常用于获得很好的格式控制,而NumberFormat 常用于指定不同于本地的地区。如何结合两个类呢?
答案围绕着这样的事实:DecimalFormat是NumberFormat的一个子类,其实例被指定为特定的地区。因此,你可以使用NumberFormat.getInstance 指定一个地区,然后将结构强制转换为一个DecimalFormat对象。文档中提到这个技术可以在大多情况下适用,但是你需要用try/catch 块包围强制转换以防转换不能正常工作 (大概在非常不明显得情况下使用一个奇异的地区)。下面是一个这样的例子:
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;
public class DecimalFormat6 {
public static void main(String args[]) {
DecimalFormat df = null;
// 得到一个NumberFormat 对象并
// 强制转换为一个 DecimalFormat 对象
try {
df = (DecimalFormat)NumberFormat.getInstance(Locale.GERMAN);
}
catch (ClassCastException e) {
System.err.println(e);
}
// 设置格式模式
df.applyPattern("####.00000");
// format a number
System.out.println(df.format(1234.56));
}
}
getInstance() 方法获得格式,然后调用applyPattern()方法设置格式模式,输出:
1234,56000
如果你不关心国际化,可以直接使用DecimalFormat 。
其中v 为未处理的double,scale为需求精度,返回需要小数位数的double
public static double round(double v,int scale){
        if(scale<0){
            throw new IllegalArgumentException(
                "The scale must be a positive integer or zero");
        }
        BigDecimal b = new BigDecimal(Double.toString(v));
        BigDecimal one = new BigDecimal("1");
        return b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
    }
分享到:
评论

相关推荐

    Java中DecimalFormat用法详解

    通过使用DecimalFormat,我们可以将数字转换为各种格式,例如取小数点后几位、科学计数法、百分比方式等等。 DecimalFormat的基本用法 DecimalFormat类提供了两种占位符号,分别是`#`和`0`。其中,`0`表示如果位数...

    Java中Double除保留后小数位的几种方法(小结)

    Java中Double除保留后小数位的几种方法 Java中Double除保留后小数位的几种方法是指在Java编程语言中,对Double类型数据进行保留小数位的操作。这种操作在实际开发中非常常见,例如在统计成绩、金融计算、科学计算等...

    js数据格式转化

    接下来,介绍几种在JavaScript中进行数字格式化的方法: 1. **四舍五入**: 可以使用`BigDecimal`类的`setScale()`方法,指定保留的小数位数以及舍入模式: ```java double f = 111231.5585; BigDecimal b = ...

    我找过来的计算器源程序

    代码中使用了两种不同的动作监听器: - **InsertAction**: 用于处理数字和符号的插入操作。 - **CommandAction**: 用于处理运算符的点击事件,如加、减、乘、除以及等于号。 ### 6. 方法实现 通过定义`addButton`...

    java字符串类型数字设置千分位分隔

    创建一个`DecimalFormat`实例后,我们可以使用`format()`方法将数字转换为字符串。 下面是一个简单的示例,展示了如何使用`DecimalFormat`设置千分位分隔: ```java import java.text.DecimalFormat; public ...

    Java保留两位小数的几种写法总结

    这里我们将深入探讨几种常见的实现方式,并通过具体的示例代码来理解它们的工作原理。 1. **使用java.math.BigDecimal** `BigDecimal` 是Java中用于高精度和任意精度的十进制运算的类。保留小数点后两位的方法如下...

    Java中限制小数位数问题

    本文将详细介绍在Java中限制小数位数的几种常见方法,并通过具体的示例代码帮助读者更好地理解和应用这些技术。 #### 方式一:使用`BigDecimal`进行四舍五入 `BigDecimal`类提供了精确的浮点数运算能力,非常适合...

    保留几位小数的5种常见方法

    保留几位小数是常见的需求,本篇将介绍Java中实现这一功能的五种常见方法。 **方法一:使用BigDecimal** `BigDecimal` 类是Java中用于表示任意精度的十进制数。在`BigDecimal` 中,`setScale()` 方法用于设置小数...

    java经验总结资料

    Java 提供了几种方法来处理浮点数的精度问题: - **使用 BigDecimal 类**:对于需要高精度计算的情况,推荐使用 `BigDecimal` 类。它可以提供任意精度的十进制数计算能力。 - **使用 Math 类**:对于基本的数学运算...

    Java中实现浮点数的精确计算

    为了解决这个问题,可以采用以下几种方法: 1. **使用`Math.round()`方法**: 可以通过乘以某个基数后再除以该基数的方法来调整结果,如将结果乘以100后取整再除以100,这样可以使得结果看起来更加“精确”。 ``...

    Java NumberFormat 类的详解及实例

    DecimalFormat 类的格式化模板主要包括以下几种: * `#`:表示数字的位数 * `,`:表示千分位符 * `.`:表示小数点 * `¥`:表示货币符号 * `%`:表示百分号 * `u2030`:表示 Unicode 编码的字符 下面是一个使用 ...

    关于java的四舍五入问题

    首先,Java提供了几种不同的方法来进行四舍五入操作: 1. **`Math.round()`**: 这是Java中最基础的四舍五入函数,它接受一个`float`或`double`类型的参数,返回最接近的`long`或`int`值。如果原数值刚好在两个整数...

    java使double保留两位小数的多方法 java保留两位小数

    本文将详细介绍几种在Java中使double类型保留两位小数的方法。 ### 方法一:使用BigDecimal进行四舍五入 `BigDecimal` 类提供了精确的浮点数运算,并且支持自定义舍入模式。以下是一个例子: ```java double f = ...

    大学生java实验(二)

    这个实验旨在让学生通过实际编程来巩固和深化对Java面向对象编程的理解,包括类的设计、对象的创建、方法的使用以及面向对象编程的核心概念。通过完成这样的实验,大学生们能够更好地掌握Java编程的基础知识,并逐步...

    java代码-java 小数点后的多余的0处理

    处理小数点后多余的零主要有以下几种方法: 1. **使用`DecimalFormat`类**: Java的`java.text.DecimalFormat`类是用于格式化十进制数字的类,它可以控制小数点后的位数以及是否显示零。例如,你可以创建一个`...

    Java面向对象面试题.pdf

    8. 排序都有哪几种方法?请列举。有冒泡排序、快速排序、插入排序、选择排序等多种方法。 9. Overload 和 Override 的区别。Overload 是指方法名相同但参数不同,Override 是指子类重写父类的方法。 10. Final 类...

    java复习题.docx

    Java是一种广泛使用的面向对象的编程语言,其基础编程主要包括数据类型、变量、运算符、控制流语句、输入输出等内容。在提供的题目中,我们可以看到以下几个关键知识点: 1. **Scanner输入**:Java提供了Scanner类...

Global site tag (gtag.js) - Google Analytics