日常踩坑:Java中double类型出现科学计数法问题

这篇具有很好参考价值的文章主要介绍了日常踩坑:Java中double类型出现科学计数法问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景:在与银行的项目对接中,近期客户反馈支付失败,错误信息是:“付款金额格式有问题”,经过日志分析,发现客户系统发送银行系统时,付款金额以科学计数法的形式传递参数。

重现:

public static void main(String[] args) {
       double amount = 13000000d;
       System.out.println("付款金额:"+amount);
}
//运行结果:
付款金额:1.3E7

经过测试发现,浮点数(double、float)当整数部分超过7位以上(不含7位),就会自动转为科学计数法显示。

解决:可以转换为BigDecimal

public static void main(String[] args) {
        double amount = 13000001f;
        BigDecimal result = new BigDecimal(String.valueOf(amount)); //特别注意当构造参数类型为double时结果有一定的不可预知性,可能会出现new BigDecimal(0.1)所创建的BigDecimal正好等于0.1,但实际等于0.100000000000005……的情况(具体可进一步自查了解),所以请转换为String构造方法
        System.out.println("付款金额:"+result);
}
//运行结果
付款金额:13000001

至此,便可解决浮点数在数据传输过程中出现科学计数法的情况!文章来源地址https://www.toymoban.com/news/detail-596228.html

到了这里,关于日常踩坑:Java中double类型出现科学计数法问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决BigDecimal序列化科学计数法前端展示问题(大坑)

    前言:在生产中出现一个问题,就是BigDecimal类型的字段在前端页面展示变成科学计数法,通过排查,发现里面的坑还是挺多的,所以特意记录下处理过程。Json序列化,不同项目中配置的都不一样,有些项目是使用springboot里面自带的jackson的,有些是使用fastjson处理,不同的序

    2024年01月18日
    浏览(45)
  • chatgpt赋能python:如何将Python中的数字转换为科学计数法

    在Python编程中,我们经常需要使用科学计数法来表示非常大或非常小的数字。在本文中,我们将介绍Python中将数字转换为科学计数法的几种方法。 Python可以使用字符串格式化操作符(%)来将数字转换为科学计数法。以下是一个例子: 这将输出数字 1.23e+09 。其中 %.2e 中的 %e 表

    2024年02月07日
    浏览(45)
  • C语言实例:输出八进制,十进制,十六进制,指定位数整数,带符号整数,科学计数法表示的整数

    直接使用printf函数输出整数即可,例如: 输出结果为: %d是printf函数的格式控制符,用于输出整数。在printf函数中,%d会被替换成一个整数变量的值。例如,printf(“%d”, num)中%d将被num的值替换,从而输出num的值作为整数。 使用printf函数的格式控制符可以输出指定位数的整数

    2024年02月08日
    浏览(55)
  • JVM零基础到高级实战之对象存活算法引用计数法存在的特点分析

    JVM零基础到高级实战之对象存活算法引用计数法存在的特点分析 JVM零基础到高级实战之对象存活算法引用计数法存在的特点分析 优点 引用计数收集器可以很快的执行,交织在程序运行中。对程序需要不被长时间打断的实时环境比较有利。 缺点 无法检测出循环引用。如父对

    2024年02月15日
    浏览(97)
  • Java中如何将String类型转为double类型

    在Java编程中,经常需要在不同数据类型之间进行转换。将String类型转换为double类型是一种常见的转换需求。Java提供了几种方法来实现这种转换,下面将介绍其中的两种常用方法。 方法一:使用Double类的parseDouble方法 Double类是Java中用于表示双精度浮点数的包装类。它提供了一

    2024年02月05日
    浏览(42)
  • 【Java 排序】冒泡排序(升降序,Int类型,Double类型,多数组排序)(111)

    思路: 用二重循环实现,外循环变量设为i,内循环变量设为j。假如有n个数需要进行排序,则外循环重复n-1次,内循环依次重复n-1,n-2,…,1次。每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,…,n-1,对于每一个i,j的值依次

    2024年02月12日
    浏览(43)
  • Java BigDecimal、Integer、Long、Double类型数值累加求和

    注意 Double小数点失真问题解决 : 先把Double转为BigDecimal,再求和。代码如下 : 如果此篇文章有帮助到您, 希望打大佬们能 关注 、 点赞 、 收藏 、 评论 支持一波,非常感谢大家! 如果有不对的地方请指正!!! 参考1

    2024年02月02日
    浏览(45)
  • 日常BUG——Java使用Bigdecimal类型报错

    😜 作           者 :是江迪呀 ✒️ 本文 : 日常BUG 、 BUG 、 问题分析 ☀️ 每日   一言 : 存在错误说明你在进步! 直接上代码: 报错内容: 原来JAVA中如果用 BigDecimal 做除法的时候一定要在divide方法中传递第二个参数,定义精确到小数点后几位,否则在不整除

    2024年02月13日
    浏览(44)
  • C++ 为什么double类型不能直接判断等于0 两个double类型怎么判断相等

    精度丢失, 十进制小数部分在转换成2进制的时候经常会出现无限位的二进制小数,计算机存储小数有长度限制,所以会进行截取部分小数进行存储,计算机只能存储大概的值,而不是精确的值 。 例如: 判断一个单精度浮点数:则是 if( abs(f) = 1e-6); 要判断一个双精度浮点数

    2024年02月12日
    浏览(66)
  • double类型大小比较的方法

    问题 在Java中,int类型数据的大小比较可以使用双等号,double类型则不能使用双等号比较大小,那若使用double类型时怎么进行比较呢? 方法 转换为字符串 如果要比较的两个double数据的字符串精度相等,可以将数据转换成string然后借助string的equals方法来间接实现比较两个doub

    2024年02月14日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包