免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 977 | 回复: 0
打印 上一主题 下一主题

Java中对浮点数的输出表示--整理稿 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-14 16:20 |只看该作者 |倒序浏览
Java中对浮点数的输出表示


在Java中浮点数包括基本型float、double,以及对象包装类型的Float和Double,对于这些浮点数的输出,不管是显式地还是隐式地调用toString()得到它的表示字串,输出格式都是按照如下规则进行的
如果绝对值大于0.001、小于10000000,那么就以常规的小数形式表示。   
如果在上述范围之外,则使用科学计数法表示。即类似于1.234E8的形式。
可以使用 java.text.DecimalFormat及其父类NumberFormat格式化数字
Pattern
0 - 如果对应位置上没有数字,则用零代替
# - 如果对应位置上没有数字,则保持原样(不用补);如果最前、后为0,则保持为空。
正负数模板用分号(;)分割
Number Format Pattern Syntax
You can design your own format patterns for numbers by following the rules specified by the following BNF diagram:
pattern    := subpattern{;subpattern}
subpattern := {prefix}integer{.fraction}{suffix}
prefix     := '\\u0000'..'\\uFFFD' - specialCharacters
suffix     := '\\u0000'..'\\uFFFD' - specialCharacters
integer    := '#'* '0'* '0'
fraction   := '0'* '#'*
DecimalFormat 常用于获得很好的格式控制,而NumberFormat 常用于指定不同于本地的地区。如何结合两个类呢?
答案围绕着这样的事实:DecimalFormat是NumberFormat的一个子类,其实例被指定为特定的地区。因此,你可以使用NumberFormat.getInstance 指定一个地区,然后将结构强制转换为一个DecimalFormat对象。文档中提到这个技术可以在大多情况下适用


整理的范例

如下:
package com.experiment;
import java.text.*;
import java.util.*;
public class TestFormat {
        public TestFormat() {
                super();
                // TODO Auto-generated constructor stub
        }
        /**
         * @param args
         */
        public static void main(String[] args) {
                customFormat("000000.000", 123.7);//000123.700
                customFormat(".##\u2030",0.7893234);//789.32‰
                customFormat(".##", 0.78934);//.79
                customFormat(".##%", 0.78934);//78.93%
                customFormat("000000.###", 123.7);//000123.7
                customFormat("\u00a5###,###.###", 12345.67); //?12,345.67
                customFormat("'这是我的钱$',###.###'美圆'",2533333443.3333);//这是我的钱$2,533,333,443.333美圆
                customFormat("\u00A4",2533333443.3333);//¥2533333443
                String pattern="'my moneny'###,###.##'RMB';'ur money'###,###.##'US'";
                customFormat(pattern,-1223233.456); //ur money1,223,233.46US
                customFormat(pattern,1223233.456); // my moneny1,223,233.46RMB
                customFormat("0.000E0000",1234.56);//1.235E0003
                customFormat3(12345.46); //¥12,345.46
                Locale[] locales = { new Locale("en", "US"),
                         new Locale("de", "DE"),
                         new Locale("fr", "FR") };
                for (int i = 0; i
        public static void localizedFormat(String pattern, double value, Locale loc ) {
                  NumberFormat nf = NumberFormat.getNumberInstance(loc);
                  DecimalFormat df = (DecimalFormat)nf;
                  df.applyPattern(pattern);
                  String output = df.format(value);
                  System.out.println(value+"  "+pattern + "  " + output + "  " + loc.toString());
        }
}


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/37218/showart_340143.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP