Java数据精度

简介: 版权声明:欢迎转载,请注明沉默王二原创。 https://blog.csdn.net/qing_gee/article/details/44061545 java的数据精度要么使用bigdecimal,要么使用int、long,切记使用double、float进行乘除。
版权声明:欢迎转载,请注明沉默王二原创。 https://blog.csdn.net/qing_gee/article/details/44061545

java的数据精度要么使用bigdecimal,要么使用int、long,切记使用double、float进行乘除。


浮点类型数据进行计算时:

System.out.println("double 99.9 * 9.9 " + 99.9 * 9.9);
		ddd = new BigDecimal(99.9 * 9.9);
		System.out.println("double 99.9 " + ddd);
此时结果为
double 99.9 * 9.9 989.0100000000001
我们都知道,99.9×9.9=989.01,那么为什么出现很多00000001呢,这就是因为Java数据运算时的精度问题,那么其解决办法有如下
ddd = new BigDecimal("99.99").multiply(new BigDecimal("9.9"));
		System.out.println("new BigDecimal " + ddd);
		
		ddd = BigDecimal.valueOf(99.99).multiply(BigDecimal.valueOf(9.9));
		System.out.println("BigDecimal.valueOf " + ddd);
可以看出结果是
new BigDecimal 989.901
BigDecimal.valueOf 989.901

也许你会疑问,为什么要用new BigDecimal("99.99")或者BigDecimal.valueOf(99.99)呢?那我们来看其他的方式

// double
		ddd = new BigDecimal(99.99);
		System.out.println("double 99.99 " + ddd);

		// double
		ddd = BigDecimal.valueOf(99.99);
		System.out.println("BigDecimal.valueOf double 99.99 " + ddd);

		// Double
		ddd = new BigDecimal(new Double(99.99));
		System.out.println("Double 99.99 " + ddd);

		// String
		ddd = new BigDecimal("99.99");
		System.out.println("String 99.99" + ddd);

		// double->String
		ddd = new BigDecimal(Double.toString(99.99));
		System.out.println("double->String 99.99 " + ddd);
你就会发现如下结果
double 99.99 99.9899999999999948840923025272786617279052734375
BigDecimal.valueOf double 99.99 99.99
Double 99.99 99.9899999999999948840923025272786617279052734375
String 99.9999.99
double->String 99.99 99.99
使用BigDecimal的构造方法时,必须为string类型,否则,其精度就会出现问题。

总结:很基础的东西,给自己好好的记一下。

相关文章
|
2月前
|
XML 数据采集 存储
使用Java和XPath在XML文档中精准定位数据
在数据驱动的时代,从复杂结构中精确提取信息至关重要。XML被广泛用于数据存储与传输,而XPath则能高效地在这些文档中导航和提取数据。本文深入探讨如何使用Java和XPath精准定位XML文档中的数据,并通过小红书的实际案例进行分析。首先介绍了XML及其挑战,接着阐述了XPath的优势。然后,提出从大型XML文档中自动提取特定产品信息的需求,并通过代理IP技术、设置Cookie和User-Agent以及多线程技术来解决实际网络环境下的数据抓取问题。最后,提供了一个Java示例代码,演示如何集成这些技术以高效地从XML源中抓取数据。
使用Java和XPath在XML文档中精准定位数据
|
6天前
|
安全 Java 开发者
Java修饰符与封装:理解访问权限、行为控制与数据隐藏的重要性
Java中的修饰符和封装概念是构建健壯、易维护和扩展的Java应用程序的基石。通过合理利用访问权限修饰符和非访问修饰符,开发者能够设计出更加安全、灵活且高效的代码结构。封装不仅是面向对象编程的核心原则之一,也是提高软件项目质量和可维护性的关键策略。
10 1
|
2月前
|
Java
【Java基础面试五】、 int类型的数据范围是多少?
这篇文章回答了Java中`int`类型数据的范围是-2^31到2^31-1,并提供了其他基本数据类型的内存占用和数值范围信息。
【Java基础面试五】、 int类型的数据范围是多少?
|
1月前
|
Java API 开发者
代码小妙招:用Java轻松获取List交集数据
在Java中获取两个 `List`的交集可以通过 `retainAll`方法和Java 8引入的流操作来实现。使用 `retainAll`方法更为直接,但会修改原始 `List`的内容。而使用流则提供了不修改原始 `List`、更为灵活的处理方式。开发者可以根据具体的需求和场景,选择最适合的方法来实现。了解和掌握这些方法,能够帮助开发者在实际开发中更高效地处理集合相关的问题。
29 1
|
2月前
|
监控 Java 开发工具
【事件中心 Azure Event Hub】Event Hub Java SDK的消费端出现不消费某一个分区中数据的情况,出现IdleTimerExpired错误消息记录
【事件中心 Azure Event Hub】Event Hub Java SDK的消费端出现不消费某一个分区中数据的情况,出现IdleTimerExpired错误消息记录
|
2月前
|
存储 Java Apache
|
2月前
|
存储 安全 Java
"Java编码魔法:揭秘图片与文件的Base64神秘转换术,让数据在指尖跳跃!"
【8月更文挑战第16天】Base64编码在Java开发中常用于将二进制数据如图片转换为ASCII字符串以便传输。编码使用64个字符及等号填充,每3字节数据编码为4个字符。Java利用`java.util.Base64`类实现此功能:读取图片或文件为字节数组后进行编码。解码时将Base64字符串还原为字节数组并写入文件。需注意编码效率降低、不提供安全性及特殊字符兼容性等问题。掌握这些技巧有助于解决Web开发中的数据传输需求。
62 4
|
2月前
|
监控 Java
Java文件夹复制解决方案:优化大文件与大量数据的处理
Java中复制文件夹及其内容,尤其是当处理大文件或文件夹(如几个GB)时,需要特别注意内存使用和性能优化。以下是一个详细的指导,包括如何避免内存溢出异常,并确保复制过程的高效性。
|
2月前
|
消息中间件 负载均衡 Java
"Kafka核心机制揭秘:深入探索Producer的高效数据发布策略与Java实战应用"
【8月更文挑战第10天】Apache Kafka作为顶级分布式流处理平台,其Producer组件是数据高效发布的引擎。Producer遵循高吞吐、低延迟等设计原则,采用分批发送、异步处理及数据压缩等技术提升性能。它支持按消息键值分区,确保数据有序并实现负载均衡;提供多种确认机制保证可靠性;具备失败重试功能确保消息最终送达。Java示例展示了基本配置与消息发送流程,体现了Producer的强大与灵活性。
59 3
|
2月前
|
存储 安全 Java
揭秘Java序列化神器Serializable:一键解锁对象穿越时空的超能力,你的数据旅行不再受限,震撼登场!
【8月更文挑战第4天】Serializable是Java中的魔术钥匙,开启对象穿越时空的能力。作为序列化的核心,它让复杂对象的复制与传输变得简单。通过实现此接口,对象能被序列化成字节流,实现本地存储或网络传输,再通过反序列化恢复原状。尽管使用方便,但序列化过程耗时且存在安全风险,需谨慎使用。
38 7
下一篇
无影云桌面