首页 > 编程语言 >Java BigDecimal出现科学计数法

Java BigDecimal出现科学计数法

时间:2024-04-19 10:11:46浏览次数:29  
标签:Java BigDecimal decimal System 计数法 科学 println

Java BigDecimal出现科学计数法

查看BigDecimal的toString()源码,可以发现出现toString()出现科学计数法的原因

	private String layoutChars(boolean sci) {
       ...
        int coeffLen = coeff.length - offset;
        long adjusted = -(long)scale + (coeffLen -1);
        if ((scale >= 0) && (adjusted >= -6)) { // plain number
           ...
        } else { // E-notation is needed
            if (sci) {                       // 是否使用科学计数法
                buf.append(coeff[offset]);   // first character
                if (coeffLen > 1) {          // more to come
                    buf.append('.');
                    buf.append(coeff, offset + 1, coeffLen - 1);
                }
            }
	...
        return buf.toString();
    }

BigDecimal方法会根据数字的具体精度位数,来判断是否需要使用科学计数法。

验证代码

public static void main(String[] args) {
        BigDecimal decimal = new BigDecimal("0.00000000000009");
        DecimalFormat decimalFormatNumberOfDecimalPlaces2 = (DecimalFormat) NumberFormat.getNumberInstance(Locale.CHINA);
        decimalFormatNumberOfDecimalPlaces2.applyPattern("#,##0.00");
        System.out.println(decimal.toString());  //输出:9E-14
        System.out.println(decimal.toPlainString()); //输出: 0.00000000000009
        System.out.println(decimalFormatNumberOfDecimalPlaces2.format(decimal)); //输出:0.00
        Map<String, Object> map = new java.util.HashMap<>();
        map.put("a", decimal);
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            String json = objectMapper.writeValueAsString(map);
            System.out.println(json); // 输出:{"a":9E-14}
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

运行代码,输出结果为

9E-14
0.00000000000009
0.00
{"a":9E-14}

结论:

  • BigDecimal方法会根据数字的具体精度位数,来判断是否需要使用科学计数法。
  • 如果确认不使用科学计数法,可以使用toPlainString()函数。
  • 使用DecimalFormat格式化之后,显示非科学计数法。
  • 使用jackson将对象序列化,jackson会将科学计数法表示的变量看作是数值。(SpringBoot下,默认使用Jackson序列化和反序列化。浏览器接收到科学计数法的数据之后当作数值来处理)。

标签:Java,BigDecimal,decimal,System,计数法,科学,println
From: https://www.cnblogs.com/zhaoleiFree/p/18145178

相关文章

  • java动态代理模式
    Java动态代理模式是Java编程语言中的一种设计模式,它提供了一种在运行时动态创建代理对象的方式。这个模式主要用于实现AOP(面向切面编程)的概念,允许开发者在不修改原有业务逻辑代码的情况下,增加额外的功能,如日志记录、事务管理、权限验证等。在Java中,动态代理模式主要依赖于java.l......
  • JavaScripts浮点数计算问题
    JS数学运算精度问题最近项目上JS做加减乘除这类的运算出现了精度不匹配的问题:例如:0.1+0.2->0.300000000000000040.3-0.2->0.099999999999999980.3*2->0.60.3*0.20.060.3/3->0.09999999999999999Mathjs这个JS库可以解决这类问题:官网链接以下是详细的步骤:终端执......
  • 3.Java基础学习
    Java基础注释单行注释多行注释文档注释publicclassHelloworld{publicstaticvoidmain(String[]args){//单行注释////输出一个HelloworldSystem.out.println("Helloworld");/*多行注释多行注释......
  • Java题目集1-3总结
    (1)前言:第一次大作业的知识点包括类与对象正则表达式以及数组对象和不同类之间的关系;题量较小,难度不大,关键是理清question,test-paper,answer-paper之间的关系。第二次大作业的知识点增加了List,ArrayList,HashMap,三种变长数组的使用,增加了正则表达式的难度,题量增加,难度上升,试卷中的......
  • java-collections-map t
    MapMap常用子类HashMap:HashMap是最常用的Map实现之一,它基于哈希表实现,提供了O(1)时间复杂度的插入、删除和查找操作。Hashtable:Hashtable是较早期的Java集合类,它是线程安全的,但性能通常比HashMap差,因为它的方法是同步的。TreeMap:TreeMap是基于红黑树实现的有序Ma......
  • java 代码编译检查工具
    <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.11.0</version><configuration><encoding&......
  • CXF WebService wsdl2java
    下载apache-cxf-3.3.1并解压到bin目录下,输入生成命令wsdl2java-encodingutf-8-dD:\Software\Webservice\wshttp://XXX.XXX.XXX.XXX:XXX/WSInterface.asmx?wsdl把生成的文件,复制到项目中,进行后续编码......
  • java-mysql-语法
    条件查询1.条件运算符:>,<,=,!=,<>2.按逻辑表达式:&&,||,!and,or,not &&和and:两个条件都为true.结果为true,反之为false ||和or:只要有一个条件为true,结果就为true,反之为false !和not:如果连接的条件本身就为false,结果为......
  • 通过Java修改consul配置(保留注释、保留缩进)
         直接上代码了,找了很久也没找到保留注释的三方包,snakeyaml的缩进一直也有问题,就自己写了个正则方式的consul也没有相关接口,只接受整个的传key和value,替换相应value值,大佬有更好的方法希望能告诉我<dependency><groupId>com.orbitz.consu......
  • JAVA基础-流程控制、字符串
    一、java基础1、java主类结构packagecom.study.again001;包名publicclasshelloword{类名staticStrings1="1";静态成员变量publicstaticvoidmain(String[]args){main方法Strings2="2";局部变量System.out.println(s1......