sqlformat数字格式化_java怎么输出数字

sqlformat数字格式化_java怎么输出数字前言以前用到要对数字格式的地方,都是直接到网上搜一下。拿过来能用就行。因为平时用的不多。但是最近的项目对这个用的多了。网上拿来的不够用了。自己看了java源码把这方面恶补了。而且最近也好长时间没有写博客了。正好写一篇抛砖引玉吧。正文如果你对java源码比较了解。你会发现java对文字,数字的格式化,是有一个公共的父类的Format。NumberFormat和DecimalFormat都是它…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

前言

以前用到要对数字格式的地方,都是直接到网上搜一下。拿过来能用就行。因为平时用的不多。但是最近的项目对这个用的多了。网上拿来的不够用了。自己看了java源码把这方面恶补了。而且最近也好长时间没有写博客了。正好写一篇抛砖引玉吧。

如果你只想知道怎么用,可以直接看下面使用示例↓↓↓。三分钟速成。

正文

如果你对java源码比较了解。你会发现java对文字,数字的格式化,是有一个公共的父类的Format
NumberFormat和DecimalFormat都是它的子类关于数字的
DateFormat和SimpleDateFormat也是它的子类关于文字的

当然今天只说NumberFormat和DecimalFormat。相信我,当你搞懂这两个以后,那么DateFormat和SimpleDateFormat也是肯定会的。

首先,要特别注意的是 NumberFormat和DecimalFormat是线程不安全的。 这意味你如果同时有多个线程操作一个format实例对象,会出现意想不到的结果。
解决方法有两个:

  1. 为每个线程都创建一个 format实例,通过ThreadLocal 来给每个线程都产生一个本地实例。如果你对ThreadLocal不了解,可以看我这篇博客
    ThreadLocal 的用法以及内存泄露(内存溢出)
  2. 进行外部同步,这个就可以通过关键词 synchronized来进行同步。如果 你不了解synchronized,可以看我这篇博客synchronized 参数 及其含义

上面的这两种方法呢,
第一种方法 **比较占用内存多,但是速度快,效率高。并发。**第二种方法 **占用内存少,效率低,耗费时间长,毕竟要排队嘛,串行。**具体取舍,看项目的情况。

JavaAPI官方描述

NumberFormat

NumberFormat帮助您格式化和解析任何区域设置的数字。您的代码可以完全独立于小数点,千位分隔符的区域设置约定,甚至是使用的特定十进制数字,或者数字格式是否为十进制。

DecimalFormat

DecimalFormat是NumberFormat十进制数字格式的具体子类 。它具有多种功能,旨在解析和格式化任何语言环境中的数字,包括支持西方,阿拉伯语和印度语数字。它还支持不同类型的数字,包括整数(123),定点数(123.4),科学记数法(1.23E4),百分比(12%)和货币金额(123美元)。所有这些都可以本地化。

NumberFormat

获取NumberFormat实例

//创建 一个整数格式 地区用系统默认的
NumberFormat integerNumber = NumberFormat.getIntegerInstance(Locale.getDefault());
  1. 使用getInstance或getNumberInstance获取正常的数字格式。
  2. 使用getIntegerInstance得到的整数格式。
  3. 使用getCurrencyInstance来获取货币数字格式。
  4. 使用getPercentInstance获取显示百分比的格式。

常用方法

在这里插入图片描述
由于API 的描述足够详细,所以我就直接截图上来了。

使用示例

DecimalFormat是NumberFormat,所以,就不要单独的为NumberFormat写一个完整的示例了。只写一下配合FieldPosition怎么使用的示例:

NumberFormat numberFormat = NumberFormat.getInstance(Locale.getDefault());
//整数部分不会每隔三个,就会有 " ,"
numberFormat.setGroupingUsed(false);
//线程安全的字符串缓冲类
StringBuffer stringBuffer = new StringBuffer();
//构造参数 是Format子类里面的 自己特有的参数,传入就行
//构造 小数部分的,所以开始 beginIndex()是从小数点 后面算的, 但是0是从整个格式化数字,第一个算起, 包括 之间用于分组的 " ,"
FieldPosition fieldPosition = new FieldPosition(NumberFormat.FRACTION_FIELD);
stringBuffer = numberFormat.format(1234.56789, stringBuffer, fieldPosition);
System.out.println(stringBuffer.toString());
//小数部分, 所以 从5 开始
System.out.println(fieldPosition.getBeginIndex() + " " + fieldPosition.getEndIndex());
//切割字符串
System.out.println(stringBuffer.toString().substring(fieldPosition.getBeginIndex()));

运行结果
在这里插入图片描述

DecimalFormat

获取DecimalFormat实例

要获取特定地区(包括默认地区)的NumberFormat,请调用NumberFormat的工厂方法之一,例如getInstance()。通常,不要直接调用DecimalFormat构造函数,因为NumberFormat工厂方法可能返回DecimalFormat之外的子类。如果需要自定义format对象,可以这样做:

        try { 
   
            NumberFormat f = NumberFormat.getInstance(Locale.getDefault());
            if (f instanceof DecimalFormat) { 
   
                ((DecimalFormat) f).setDecimalSeparatorAlwaysShown(true);
                //写具体的代码
            }
        } catch (Exception e) { 
   
            e.printStackTrace();
        }

设置Pattern

DecimalFormat作为NumberFormat的具体实现子类,最大的特点就是 可以使用Pattern。来实现最大程度的对数据格式进行定制。
一个Pattern中的许多字符是按字面意思理解的;它们在解析期间匹配,在格式化期间输出不变,就是字符在Pattern中 不影响最后的数字格式化另一方面,特殊字符代表其他字符、字符串或字符类。如果要以文字形式出现在前缀或后缀中,必须引用它们(除非另有说明)。
在这里插入图片描述

子类特有的方法

因为懒,而且这玩意是在简单,大家就将就看个截图吧。
在这里插入图片描述

使用示例

接下来就是万众瞩目的示例代码了,只要java基础可以,一开始看这个完全就可以学会用法。

通用格式

        //创建一个默认的通用格式
        NumberFormat numberFormat = NumberFormat.getInstance();
        DecimalFormat numberDecimalFormat;
        //捕捉异常,以防强制类型转换出错
        try { 
   
            //强制转换成DecimalFormat
            numberDecimalFormat = (DecimalFormat) numberFormat;
            //保留小数点后面三位,不足的补零,前面整数部分 每隔四位 ,用 “,” 符合隔开
            numberDecimalFormat.applyPattern("#,####.000");
            //设置舍入模式 为DOWN,否则默认的是HALF_EVEN
            numberDecimalFormat.setRoundingMode(RoundingMode.DOWN);
            //设置 要格式化的数 是正数的时候。前面加前缀
            numberDecimalFormat.setPositivePrefix("Prefix ");
            System.out.println("正数前缀 "+numberDecimalFormat.format(123456.7891));
            //设置 要格式化的数 是正数的时候。后面加后缀
            numberDecimalFormat.setPositiveSuffix(" Suffix");
            System.out.println("正数后缀 "+numberDecimalFormat.format(123456.7891));
            //设置整数部分的最大位数
            numberDecimalFormat.setMaximumIntegerDigits(3);
            System.out.println("整数最大位数 "+numberDecimalFormat.format(123456.7891));
            //设置整数部分最小位数
            numberDecimalFormat.setMinimumIntegerDigits(10);
            System.out.println("整数最小位数 "+numberDecimalFormat.format(123456.7891));
            //设置小数部分的最大位数
            numberDecimalFormat.setMaximumFractionDigits(2);
            System.out.println("小数部分最大位数 "+numberDecimalFormat.format(123.4));
            //设置小数部分的最小位数
            numberDecimalFormat.setMinimumFractionDigits(6);
            System.out.println("小数部分最小位数 "+numberDecimalFormat.format(123.4));
        }catch (Exception e){ 
   
            e.printStackTrace();
        }

运行结果
在这里插入图片描述

获取百分比格式

对数字 进行 百分比 格式化

        //创建一个中国地区的 百分比格式
        NumberFormat perFormat = NumberFormat.getPercentInstance(Locale.CHINA);
        DecimalFormat percentFormat;
        try { 
   
            percentFormat = (DecimalFormat) perFormat;
            //设置Pattern 会使百分比格式,自带格式失效
// percentFormat.applyPattern("##.00");
            //设置小数部分 最小位数为2
            percentFormat.setMinimumFractionDigits(2);
            System.out.println(percentFormat.format(0.912345));
        } catch (Exception e) { 
   
            e.printStackTrace();
        }

运行结果:
在这里插入图片描述

货币格式

        //创建一个中国地区的 货币格式
        NumberFormat curFormat = NumberFormat.getCurrencyInstance(Locale.CHINA);
        DecimalFormat currencyFormat;
        try { 
   
            currencyFormat = (DecimalFormat) curFormat;
            //设置Pattern 会使百分比格式,自带格式失效
// currencyFormat.applyPattern("##.00");
            System.out.println(currencyFormat.format(0.912345));
            //乘法 数乘以多少 这个方法是 百分比时候 设置成100 km时候 是1000
            currencyFormat.setMultiplier(100);
            System.out.println(currencyFormat.format(0.912345));
        } catch (Exception e) { 
   
            e.printStackTrace();
        }

运行结果:
在这里插入图片描述

整数格式

因为它很简单,作用就是只解析 整数部分的。小数部分的会被舍入。
例如 “3456.78”→3456(并且在索引6之后保留解析位置)

如果有不懂的,可以关注我的公众号 “知我饭否” 向我留言。我会每天更新一些文章,有兴趣的可以 微信 搜索”知我饭否” or 扫描我的 博客头像

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/184339.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • leetcode-78子集[通俗易懂]

    leetcode-78子集[通俗易懂]给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。示例 1:输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例 2:输入:nums = [0]输出:[[],[0]] 提示:1 <= nums.length <= 10-10 <= nums[i] <= 10nums 中的所有元素 互

  • html5设置table样式_原生js添加样式

    html5设置table样式_原生js添加样式table样式设置表格:._table{width:100%;border-collapse:collapse;border:0px;}设置表头:._tabletheadtr{font-size:13px;color:#2e3b45;text-align:center;background-color:rgba(230,255,250,0.92);…

  • 又一个新的开始「建议收藏」

    又有一段时间没有进行整理和总结输出了,其实最近也没有闲着,也是一直在看书学习状态,看Java并发编程相关的知识,之前买了《Java并发编程的艺术》,去年看了一遍。最近又买了《Java并发编程实战》,两本书都挺好的,《Java并发编程的艺术》这本看了一遍,最近在看其中的一些章节,又有新的一些体会,新的认识。很多时候看了一遍的书,就不会在读第二遍,但是有些书适合读两遍以上,要不然根本无法理解书中的精…

  • React Native(四)——顶部以及底部导航栏实现方式

    React Native(四)——顶部以及底部导航栏实现方式

  • Dubbo + Hystrix 实现服务熔断「建议收藏」

    Dubbo + Hystrix 实现服务熔断「建议收藏」熔断器简介在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以通过RPC相互调用。为了保证其高可用,单个服务通常会集群部署。由于网络原因或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。为了解决这个问题,业界提出了熔断器模型。Netflix

  • flyweight设计模式_适配器模式菜鸟

    flyweight设计模式_适配器模式菜鸟亨元模式动机模式定义实例结构要点总结笔记。动机在软件系统采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行时代价—主要指内存需求方面的代价如何在避免大量细粒度对象问题的同时,让外部客户仍然能够透明地使用面向对象地方式来进行操作模式定义运用共享技术有效地支持大量细粒度地对象。实例每一个字符都是一个字体 字体对象Fontclass Font{private: //unique object key string key; //object

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号