广告
返回顶部
首页 > 资讯 > 后端开发 > Python >使用BigDecimal去掉小数点后无用的0
  • 234
分享到

使用BigDecimal去掉小数点后无用的0

2024-04-02 19:04:59 234人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录如题:BigDecimal去掉小数点后无用的0解决:BigDecimal,有方法解决stripTrailingZeros()demo方法二:Java BigDecimal 小数点

如题:BigDecimal去掉小数点后无用的0

比如:数据库存储的是Decimal(5,2)类型保留两位数。

如果展示数据5.00,5.10等字样感觉很不爽,如何做呢?

只战术5和5.1

解决:BigDecimal,有方法解决stripTrailingZeros()

源码



    public String toPlainString() {
        if(scale==0) {
            if(intCompact!=INFLATED) {
                return Long.toString(intCompact);
            } else {
                return intVal.toString();
            }
        }
        if(this.scale<0) { // No decimal point
            if(signum()==0) {
                return "0";
            }
            int tailingZeros = checkScaleNonZero((-(long)scale));
            StringBuilder buf;
            if(intCompact!=INFLATED) {
                buf = new StringBuilder(20+tailingZeros);
                buf.append(intCompact);
            } else {
                String str = intVal.toString();
                buf = new StringBuilder(str.length()+tailingZeros);
                buf.append(str);
            }
            for (int i = 0; i < tailingZeros; i++)
                buf.append('0');
            return buf.toString();
        }
        String str ;
        if(intCompact!=INFLATED) {
            str = Long.toString(Math.abs(intCompact));
        } else {
            str = intVal.abs().toString();
        }
        return getValueString(signum(), str, scale);
    }
 
    public BigDecimal stripTrailingZeros() {
        if (intCompact == 0 || (intVal != null && intVal.signum() == 0)) {
            return BigDecimal.ZERO;
        } else if (intCompact != INFLATED) {
            return createAndStripZerosToMatchScale(intCompact, scale, Long.MIN_VALUE);
        } else {
            return createAndStripZerosToMatchScale(intVal, scale, Long.MIN_VALUE);
        }
    }

demo


public class StringUtils {
    public static void main(String[] args) {
        System.out.println(BigDecimal.ZERO);
        System.out.println(new BigDecimal("2.0"));
        System.out.println(new Double("0"));
        System.out.println(new BigDecimal("2.00"));
        String d = new BigDecimal("100.10").stripTrailingZeros().toPlainString();
        System.out.println(d);
        System.out.println(new BigDecimal("100.10").stripTrailingZeros().toPlainString());
    }
}

结果:

在这里插入图片描述

方法二:


 private static final DecimalFORMat decimalFormat = new DecimalFormat("###################.###########");
    public static void main(String[] args) throws Exception{
        System.out.print( "格式化结果:");
        System.out.println(decimalFormat.format(new BigDecimal("10.10")));
    }

结果:

在这里插入图片描述

Java BigDecimal 小数点处理

保留两位小数

方法一:


{
   double   c=3.154215;
   java.text.DecimalFormat myformat=new java.text.DecimalFormat("0.00");
   String str = myformat.format(c);   
}

方式二:


{
   java.text.DecimalFormat   df   =new   java.text.DecimalFormat("#.00");
   df.format(你要格式化的数字);
   例:new java.text.DecimalFormat("#.00").format(3.1415926)
   #.00 表示两位小数 #.0000四位小数 以此类推...
}

方式三:


{
   double d = 3.1415926;
   String result = String .format("%.2f");
   %.2f %. 表示 小数点前任意位数   2 表示两位小数 格式后的结果为f 表示浮点型
}

四舍五入


{
double   f   =   111231.5585;
BigDecimal   b   =   new   BigDecimal(f);
//保留2位小数
double   f1   =   b.setScale(2,   BigDecimal.ROUND_HALF_UP).doubleValue();
}

public class PreciseCompute {
//默认除法运算精度
private static final int DEF_DIV_SCALE = 10;
 

 
public static double add(double v1, double v2) {
   BigDecimal b1 = new BigDecimal(Double.toString(v1));
   BigDecimal b2 = new BigDecimal(Double.toString(v2));
   return b1.add(b2).doubleValue();
}
 

 
public static double sub(double v1, double v2) {
   BigDecimal b1 = new BigDecimal(Double.toString(v1));
   BigDecimal b2 = new BigDecimal(Double.toString(v2));
   return b1.subtract(b2).doubleValue();
}
 

public static double mul(double v1, double v2) {
   BigDecimal b1 = new BigDecimal(Double.toString(v1));
   BigDecimal b2 = new BigDecimal(Double.toString(v2));
   return b1.multiply(b2).doubleValue();
}
 

 
public static double div(double v1, double v2) {
   return div(v1, v2, DEF_DIV_SCALE);
}
 

public static double div(double v1, double v2, int scale) {
   if (scale < 0) {
    throw new IllegalArgumentException(
      "The scale must be a positive integer or zero");
   }
   BigDecimal b1 = new BigDecimal(Double.toString(v1));
   BigDecimal b2 = new BigDecimal(Double.toString(v2));
   return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
 

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 ne = new BigDecimal("1");
   return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
}
 

my code:


private BigDecimal formatComma2BigDecimal(Object obj) {
		String val = String.valueOf(obj);
		if (val == null)
			return new BigDecimal("0.00");
 
		val = val.replaceAll(",", "");
		if (!isNumber(val))
			return new BigDecimal("0.00");
 
		BigDecimal decimal = new BigDecimal(val);
		decimal = decimal.setScale(2, RoundingMode.HALF_UP); 
		return decimal;
 
	}
	private String formatCommaAnd2Point(Object obj) {
		BigDecimal decimal = formatComma2BigDecimal(obj);
 
		DecimalFormat df = new DecimalFormat("#,###.00");
		String decimalStr = df.format(decimal).equals(".00")?"0.00":df.format(decimal);
		if(decimalStr.startsWith(".")){
			decimalStr = "0"+decimalStr;
		}
		return decimalStr;
	}
	private boolean isDouble(String value) {
		try {
			Double.parseDouble(value);
			if (value.contains("."))
				return true;
			return false;
		} catch (NumberFormatException e) {
			return false;
		}
	}
	private boolean isInteger(String value) {
		try {
			Integer.parseInt(value);
			return true;
		} catch (NumberFormatException e) {
			return false;
		}
	}
	private boolean isNumber(String value) {
		return isInteger(value) || isDouble(value);
	}

详细还是参看JavaSE 帮助文档吧~以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: 使用BigDecimal去掉小数点后无用的0

本文链接: https://www.lsjlt.com/news/132579.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用BigDecimal去掉小数点后无用的0
    目录如题:BigDecimal去掉小数点后无用的0解决:BigDecimal,有方法解决stripTrailingZeros()demo方法二:Java BigDecimal 小数点...
    99+
    2022-11-12
  • Java如何去掉小数点后面无效0
    今天小编给大家分享一下Java如何去掉小数点后面无效0的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一:需求当小数位很多的时...
    99+
    2023-07-02
  • Java去掉小数点后面无效0的方案与建议
    目录一:需求二:方案2.1 正则匹配2.2 BigDecimal三:测试四:建议一:需求 当小数位很多的时候,小数位后面可能有一些多余的0并没有任何实际意义。所以在某些业务需求下可以...
    99+
    2022-11-13
  • Java之BigDecimal系列--去掉小数末尾多余的0
    原文网址:Java之BigDecimal系列--去掉小数末尾多余的0_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Java去掉BigDecimal小数末尾多余的0的方法。 概述 BigDecimal提供了stripTrailing...
    99+
    2023-09-14
    java 开发语言
  • 使用Python去除小数点后面多余的0问题
    目录Python去除小数点后面多余的0Python去掉数字前面的0Python去除小数点后面多余的0 最近在用Python 写导入数据的脚本。百度 必应搜了好多,都没有一个完美解决的...
    99+
    2022-11-11
  • 如何使用Python去除小数点后面多余的0
    本文小编为大家详细介绍“如何使用Python去除小数点后面多余的0”,内容详细,步骤清晰,细节处理妥当,希望这篇“如何使用Python去除小数点后面多余的0”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Pytho...
    99+
    2023-07-02
  • php怎么去掉小数点后的内容
    在php中,对于浮点数的处理一直是一个让人头痛的问题。这是因为浮点数在计算机中的表示是有限的,而且很多浮点数的计算都会产生误差。其中,在输出中我们往往希望只保留小数点后面的几位,并去掉不需要的部分,本文就介绍几种php去掉小数的方法。一:使...
    99+
    2023-05-14
    php
  • php如何去掉小数点后的内容
    这篇文章主要介绍了php如何去掉小数点后的内容的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇php如何去掉小数点后的内容文章都会有所收获,下面我们一起来看看吧。一:使用number_format函数number...
    99+
    2023-07-05
  • python 如何将浮点数尾部无效0去掉和无效的‘.’号
    方法一: a = 12.12300 #结果要求为12.123 b = 12.00 #结果为12 c = 200.12000 #结果为200.12 d = 200.0 #结果为...
    99+
    2022-11-11
  • 使用BigDecimal除法后保留两位小数
    目录BigDecimal除法后保留两位小数详细描述BigDecimal除法异常Non-terminating decimal expansion异常分析解决措施思考总结BigDeci...
    99+
    2022-11-13
  • 如何使用BigDecimal除法后保留两位小数
    这篇文章主要介绍“如何使用BigDecimal除法后保留两位小数”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何使用BigDecimal除法后保留两位小数”文章能帮助大家解决问题。BigDecim...
    99+
    2023-07-02
  • java BigDecimal使用(小数点,字符串等转换)
    一、BigDecimal介绍  Java中提供了操作大数字(超过16位有效位)的类, 即 java.math.BigInteger 类和 java.math.BigDecimal 类,用于高精度计算。 float和Double只能用来做科学...
    99+
    2023-09-15
    java bigdecimal arith 加减乘除 转换
  • 利用Java如何实现去掉字符串中的数字0
    利用Java如何实现去掉字符串中的数字0?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。方式一:例如:”0000123” (字符串必须全为数字)处理过程:String tempS...
    99+
    2023-05-31
    java ava 字符串
  • Java中小数点后多余的0怎么使用正则表达式实现删除
    这篇文章给大家介绍Java中小数点后多余的0怎么使用正则表达式实现删除,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。具体如下:package test;public class TestString { public...
    99+
    2023-05-31
    java 正则表达式 ava
  • javaString.split无法使用小数点分割的问题
    目录String.split 无法使用小数点分割解决方法String.split()方法的注意点(转义符)1.字符串中存在.和|的时候2.如果在一个字符串中有多个分隔符String....
    99+
    2022-11-13
  • 如何使用批处理实现去掉字符串头所有的0
    这篇文章主要介绍了如何使用批处理实现去掉字符串头所有的0,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。代码如下:@echo off :: 去掉字...
    99+
    2023-06-09
  • 使用EditText怎么限制小数点前后的位数
    今天就跟大家聊聊有关使用EditText怎么限制小数点前后的位数,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在EditText输入数字的时候,通常我们需要限制小数点前后位数。比如金...
    99+
    2023-05-31
    edittext edi
  • Excel如何使用Ctrl+Shift+1快速去小数点
    小编给大家分享一下Excel如何使用Ctrl+Shift+1快速去小数点,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Ctrl+Shift+1快速去小数点&nbs...
    99+
    2023-06-27
  • 使用php怎么去掉字符串的最后几个字符
    使用php怎么去掉字符串的最后几个字符?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。方法1:使用rtrim()函数<php$str = &q...
    99+
    2023-06-15
  • 使用php怎么去掉字符串中的最后一个元素
    这期内容当中小编将会给大家带来有关使用php怎么去掉字符串中的最后一个元素,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。php的框架有哪些php的框架:1、Laravel,Laravel是一款免费并且开源...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作