`
txf2004
  • 浏览: 6878536 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Double 类型 格式化小数点的问题

阅读更多
这是别人的例子:
//保留小数点后两位小数
publicdoubleNumber2(doublepDouble)
...{
BigDecimalbd
=newBigDecimal(pDouble);
BigDecimalbd1
=bd.setScale(2,bd.ROUND_HALF_UP);
pDouble
=bd1.doubleValue();
longll=Double.doubleToLongBits(pDouble);

returnpDouble;
}


格式化输出数字
翻译:Cherami
email:cherami@163.net
原文:http://developer.java.sun.com/developer/TechTips/2000/tt0411.html
* 格式化输出数字
格式化输出数字
有时我们需要控制输出的数字的格式,如何使用java的类库做到这个呢?
也许你不关心格式,但是你需要关心你的程序可以在全世界通用,像下面的这样一个简单的语句是依赖地区的:
System.out.println(1234.56);
在美国,"." 是小数点,但在其它地方就不一定了。如何处理这个呢?

java.text 包中的一些包可以处理这类问题。下面的简单范例使用那些类解决上面提出的问题:

importjava.text.NumberFormat;

importjava.util.Locale;

publicclassDecimalFormat1...{

publicstaticvoidmain(Stringargs[])...{

//得到本地的缺省格式

NumberFormatnf1
=NumberFormat.getInstance();

System.out.println(nf1.format(
1234.56));

//得到德国的格式

NumberFormatnf2
=

NumberFormat.getInstance(Locale.GERMAN);

System.out.println(nf2.format(
1234.56));

}


}

如果你在美国,运行程序后输出:

1,234.56

1.234,56

换句话说,在不同的地方使用不同的习惯表示数字。

NumberFormat.getInstance()方法返回NumberFormat的一个实例(实际上是NumberFormat具体的一个子类,例如DecimalFormat), 这适合根据本地设置格式化一个数字。你也可以使用非缺省的地区设置,例如德国。然后格式化方法根据特定的地区规则格式化数字。这个程序也可以使用一个简单的形式:

NumberFormat.getInstance().format(1234.56)

但是保存一个格式然后重用更加有效。国际化是格式化数字时的一个大问题。

另一个是对格式的有效控制,例如指定小数部分的位数,下面是解决这个问题的一个简单例子:

importjava.text.DecimalFormat;

importjava.util.Locale;

publicclassDecimalFormat2...{

publicstaticvoidmain(Stringargs[])...{

//得到本地的缺省格式

DecimalFormatdf1
=newDecimalFormat("####.000");

System.out.println(df1.format(
1234.56));

//得到德国的格式

Locale.setDefault(Locale.GERMAN);

DecimalFormatdf2
=newDecimalFormat("####.000");

System.out.println(df2.format(
1234.56));

}


}

在这个例子中设置了数字的格式,使用像"####.000"的符号。这个模式意味着在小数点前有四个数字,如果不够就空着,小数点后有三位数字,不足用0补齐。程序的输出:

1234.560

1234,560

相似的,也可以控制指数形式的格式,例如:

importjava.text.DecimalFormat;

publicclassDecimalFormat3...{

publicstaticvoidmain(Stringargs[])...{

DecimalFormatdf
=newDecimalFormat("0.000E0000");

System.out.println(df.format(
1234.56));

}


}


输出:

1.235E0003

对于百分数:

importjava.text.NumberFormat;

publicclassDecimalFormat4...{

publicstaticvoidmain(Stringargs[])...{

NumberFormatnf
=NumberFormat.getPercentInstance();

System.out.println(nf.format(
0.47));

}


}

输出:

47%

至此,你已经看到了格式化数字的几个不同的技术。另一方面,如何读取并解析包含格式化的数字的字符串?解析支持包含在NumberFormat中。例如:

importjava.util.Locale;

importjava.text.NumberFormat;

importjava.text.ParseException;

publicclassDecimalFormat5...{

publicstaticvoidmain(Stringargs[])...{

//本地格式

NumberFormatnf1
=NumberFormat.getInstance();

Objectobj1
=null;

//基于格式的解析

try...{

obj1
=nf1.parse("1234,56");

}


catch(ParseExceptione1)...{

System.err.println(e1);

}


System.out.println(obj1);

//德国格式

NumberFormatnf2
=

NumberFormat.getInstance(Locale.GERMAN);

Objectobj2
=null;

//基于格式的解析

try...{

obj2
=nf2.parse("1234,56");

}


catch(ParseExceptione2)...{

System.err.println(e2);

}


System.out.println(obj2);

}


}


这个例子分两部分,都是解析一个字符串:"1234,56"。第一部分使用本地格式解析,第二部分使用德国格式解析。当程序在美国运行,结果是:

123456

1234.56

换句话说,"1234,56"在美国被认为是一个巨大的整数"123456"而在德国被认为是一个小数"1234.56"。

还有格式化讨论的最后一个问题。在上面的例子中, 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 。
分享到:
评论

相关推荐

    格式化数字保留N位小数

    格式化数字保留N位小数 System.Globalization.NumberFormatInfo provider = new System.Globalization.NumberFormatInfo(); provider.NumberDecimalDigits =intDecLength; //要设定的小数位数 double strCashAmt=...

    C#小数点格式化用法小结

    本文实例讲述了C#小数点格式化用法。分享给大家供大家参考,具体如下: 1.ToString()方法 double d=12345678.2334; Console.WriteLine(d.ToString(F2)); //1234.23 Console.WriteLine(d.ToString(###,###.00)); //...

    Oracle 数据类型

    7、LOB数据类型用于存储大型的,没有被结构化的数据,例如二进制文件,图片文件,LOB主要分为BLOB和CLOB,BLOB数据类型用于存储二进制对象:图像,音频,视频...CLOB数据类型用于存储字符格式的大型对象 ...

    iOS中金额字符串格式化显示的方法示例

    由于项目中很多地方展现统计金额, 比如在一些金融类的 App 中,对于表示金额类的字符串,通常需要进行格式化后再显示出来。例如: 0 –> 0.00 123 –> 123.00 123.456 –> 123.46 102000 –> 102,000.00 10204500 ...

    社会上常用的Java试题库

    一、Java基础知识 1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别。 2.字符串的操作: 写一个方法,实现字符串的反转,如:输入abc,输出cba 写一个方法,实现字符串的替换,... 如何格式化日期

    java面试题大全--java基础,struts,spring,ejb等

    如何格式化日期 5.数组和集合 6.文件和目录(I/O)操作 如何列出某个目录下的所有文件 如何列出某个目录下的所有子目录 判断一个文件或目录是否存在 如何读写文件 7.Java多态的实现(继承、重载、覆盖) 8.编码...

    java常用工具类的使用

    对数字的格式化,在程序处理中也是非常常用的,数字格式化主要对小数点位数,表示的形式(比如:百分数表示)等格式处理。 NumberFormat 是所有数值格式的抽象基类。此类提供格式化和解析数值的接口。若要格式化...

    保留2位小数

    这种方式处理保留2位小数很方便,刚开始的时候我自己写if判断太麻烦了,最后知道用DecimalFormat 格式化,就可以把整数小数 都保留2位小数,分享给大家。

    php float不四舍五入截取浮点型字符串方法总结

    1、 float round ( float $val [, int $precision...2、 string sprintf ( string $format [, mixed $args [, mixed $… ]] ) 返回格式化数据的字符串复制代码 代码如下:$a=12.338938438; echo sprintf(“%.5f”,$a) //

    整理后java开发全套达内学习笔记(含练习)

    格式化输出 Formatter;格式化输入 Scanner;正则表达式 输出格式控制: 转义符: \ddd 1到3位8进制数指定Unicode字符输出(ddd) \uxxxx 1到4位16进制数指定Unicode字符输出(xxxx) \\ \ \' ' \" ...

    leetcode打不开-30_Days_Of_Code:解决竞争性编码问题的30天

    读取输入行(根据下面输入格式部分中给出的序列)并初始化您的变量。 使用该运算符执行以下操作: 在新行上打印加上您的 int 变量的总和。 在新行上将加上双变量的总和打印到小数点后一位。 与您作为输入读取的字符...

    C语言程序设计标准教程

    其类型说明符为float 单精度说明符,double 双精度说明符。在Turbo C中单精度型占4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,只能提供七位有效数字。双精度型占8 个字节(64位)内存空间,其数值范围...

    MFC数字图像处理(BMP格式读取 保存 DFT FFT 直方图 色调均化 缩放 模糊 锐化 滤镜 形态学处理 曲线 裁剪 灰度图 彩色图 自动阈值)

    BMP格式读取 保存 DFT FFT 直方图 色调均化 缩放 模糊 锐化 滤镜 形态学处理 曲线 裁剪 灰度图 彩色图 自动阈值 等等...除此之外还有很多其他小功能... 建议使用VS2013打开!!!核心代码在Bmp.cpp中!!! 更新...

    JAVA面试题最全集

    如何格式化日期 5.数组和集合 6.文件和目录(I/O)操作 如何列出某个目录下的所有文件 如何列出某个目录下的所有子目录 判断一个文件或目录是否存在 如何读写文件 7.Java多态的实现(继承、重载、覆盖) 8....

    编译器用Java编写程序

    =-1)//判断字符串中是否已经包含了小数点 { } else//如果没数点有小 { if(tf1.getText().trim().equals("0"))//如果初时显示为0 { str.setLength(0); tf1.setText((str.append("0"+e2.getActionCommand()))...

    jpivot学习总结.doc

    formatter 该属性定义了 Member.getCaption() 方法返回的动作值,这里需要是一个实现了 mondrian.olap.MemberFormatter 接口的类,用来对 Caption 地值进行格式化。 3.6. Join 对于一个 Hierarchy 来说,有两种...

    freemarker总结

    在模板里对sequences和hashes初始化 sequences 1. [“you”,”me”,”he”] 2. 1..100 3. [ {“Akey”:”Avalue”},{“Akey1”:”Avalue1”}, {“Bkey”:”Bvalue”},{“Bkey1”:”Bvalue1”}, ] hashes {“you”:...

    Java-PHP-C#

    现在,我们已经可以确认字符串了, 我们现在把所有逗号都去掉 str_replace(",", "", $money) 然后在把类型看成 double然后我们就可以通过他做数学计算了. 构造检查email的正则表达式 好,让我们继续讨论怎么验证一...

Global site tag (gtag.js) - Google Analytics