业务背景:mysql中A表中的B字段的类型是decimal类型,小数位数是三位,某一条数据的值是3000000,在Java中查询出来的结果是3000000.000,这样显示在页面中不太好看,用户希望看到是3000000。 
      解决办法:使用 stripTrailingZeros().toPlainString()来解决。下面举例说明如何去掉BigDecimal类型变量小数点后多余的零: 
BigDecimal testData = new BigDecimal("3000000.000");
System.out.println("直接转换成字符串后输出:" + testData.toString());
System.out.println("去掉尾部无用的零转并转换成字符串后输出:" + testData.stripTrailingZeros().toString());
System.out.println("只展示数值:" + testData.stripTrailingZeros().toPlainString());
System.out.println("工程计数法输出:" + testData.stripTrailingZeros().toEngineeringString());

测试结果:

直接转换成字符串后输出:3000000.00
去掉尾部无用的零转并转换成字符串后输出:3E+6
只展示数值:3000000
工程计数法输出:3E+6  
      但是,如果将3000000.000改为3000000.700等,小数点后面有非零数字的场景,则stripTrailingZeros().toString()不会输出为科学计数法。
     toString(),toPlainString(),toEngineeringString() 这三个方法都是用于将BigDecimal 转换成字符串,不同之处是toString()有可能会使用科学记数法,toPlainString()只展示数值,不使用科学记数法,toEngineeringString()工程计数法,与科学技术法类似,但要求10的幂必须是3的倍数。
toPlainString
toString
toEngineeringString
1000
1 * 10^3
1 * 10^3
10000
1 * 10^4
10 * 10^3
100000
1 * 10^5
100 * 10^3
1000000
1 * 10^6
1 * 10^6
但是,下面的方法不可以使用stripTrailingZeros()去除末尾无用的零,只能手动转换。
public static void main(String[] args) {
BigDecimal ratio= new BigDecimal("0.00");
System.out.println(ratio.stripTrailingZeros().toPlainString());
// 自行判断,判断相等的时候,使用comparTo(),equals()不靠谱
if (0 == BigDecimal.ZERO.compareTo(ratio)) {
System.out.println("0");
}
if (!BigDecimal.ZERO.equals(ratio)) {
System.out.println(" 居然不相等 ");
}
       总结:BigDecimal是处理高精度的浮点数运算的常用的一个类,当需要将BigDecimal中保存的浮点数值打印出来,特别是在页面上显示的时候,就有可能遇到意料之外的科学技术法表示的问题。stripTrailingZeros()可以去除小数点后多余的0,用科学记数法表示,再结合toPlainString()即可输出数值。
 
 
 
 
 
 
 
 
 
 

去掉BigDecimal类型变量小数点后多余的零的更多相关文章

  1. java正则去掉小数点后多余0

    需求:已知字符串为一数字字符形式,多为float,double转换过来,将其后多余的0与.去掉. package test; /** * 去掉多余的.与0 * @author Hust * @Time ...

  2. 使用BigDecimal完成小数点后的精确位数的四舍五入

    package com.ryan; import java.math.BigDecimal; class MyMath { public static double round(double num ...

  3. (JS,JAVA,MySql)去除小数后多余的0

    分别通过JS,JAVA和MySql实现去除小数后多余的0 1. JS方法 /** *去除小数点后多余的0 */ function cutZero(old) { //拷贝一份 返回去掉零的新串 old ...

  4. iOS 当请求到的数据是double类型,会失去精准度,并且去掉小数点后的0

    首先请求到的数据都会变成字符串,先将字符串转化为double类型 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px Menlo; color: ...

  5. C# decimal 去掉小数点后的无效0

    c#去掉小数点后的无效0 decimal d = 0.0500m; d.ToString("0.##")就出来了 也可以这样 string.Format("{0:0.## ...

  6. mysql之处理金钱小数点后的多余0

    问题产生原因:我们在做基金项目   产生大量的金钱  在GP首页展示首页信息的时候要求去除多余的0   由于我们在数据库设计的时候查询返回数据 例如18.100000 这种形式  而我们需要将多余的0 ...

  7. sql server执行动态拼接sql(带传参数)和去掉小数点后0的函数

    1 exec sp_executesql N'SELECT 2 [Extent2].[Id] AS [Id], 3 [Extent2].[Name] AS [Name], 4 [Extent2].[D ...

  8. BigDecimal常用的加减乘除算法、比较大小、不展示多余的零、保存两位小数点

    项目中涉及到了BigDecimal的加.减.乘.比较大小.精确度的问题.所以在此总结一下,方便以后复习. //加法 BigDecimal coins = new BigDecimal("0& ...

  9. 将double型小数点后面多余的零去掉

    /** 函数功能:将数值小数点后面多余的零清空.* 参数描述:*     [in] aSource - 输入的源数值:*     [out] aDestination - 输出截取后的数值*     ...

随机推荐

  1. VS.NET(C#)--2.8HTML服务器控件

    HTML服务器控件 服务器不处理HTML控件,例如:<h1>.<a>超链接.<input>,直接送到客户端,由浏览器呈现. 把HTML控件转换成HTML服务器控件, ...

  2. .netCore 动态织入

    using Microsoft.Extensions.DependencyInjection; using System; using System.Reflection; namespace Aop ...

  3. 转 winfrom组件圆角

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  4. Python基础数据类型(数字、字符串、布尔、列表、元组、字典、集合等)

    数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需要定 ...

  5. Django-cms show_menu参数解释

    当页面结构设置(/admin/cms/page)如下: - Home (level=0) - About Us (level=1) - About Company Services (level=2) ...

  6. vue进入页面时不在顶部,检测滚动返回顶部按钮

    这里是本小白使用时遇到的问题及个人使用的方法可能并不完美. 1.监测浏览器滚动条滚动事件及滚动距离 dmounted() { window.addEventListener("scroll& ...

  7. ios数组倒序

    比如有一个数组: NSArray *arr = @["]; 倒过来排序: arr = [[arr reverseObjectEnumerator] allObjects]; NSMutabl ...

  8. Java并发 行级锁/字段锁/表级锁 乐观锁/悲观锁 共享锁/排他锁 死锁

    原文地址:https://my.oschina.net/oosc/blog/1620279 前言 锁是防止在两个事务操作同一个数据源(表或行)时交互破坏数据的一种机制. 数据库采用封锁技术保证并发操作 ...

  9. echart——关系图graph详解

    VueEchart组件见上一篇 <template> <VueEcharts :options="options" auto-resize /> </ ...

  10. nginx: [emerg] directive "upstream" has no opening "{" in /application/nginx-1.6.3/conf/nginx.conf:13 ...

    修改nginx.conf配置文件时,报以下错误: [root@bqh-lb- nginx]# vim conf/nginx.conf [root@bqh-lb- nginx]# sbin/nginx ...