bigdecimal为什么精确
时间: 2023-10-18 15:27:15 浏览: 50
BigDecimal是Java中用于处理高精度数字运算的类。它之所以能够提供精确的计算结果,是因为它使用了任意精度的十进制表示方法。
在计算机内部,数字通常以二进制表示,而十进制小数无法完全准确地用二进制表示。这就导致了在使用float或double等浮点数类型进行计算时,会产生舍入误差。
而BigDecimal采用了基于BigDecimal的定点运算,即利用大整数的形式表示小数,并且提供了一套完整的运算规则,能够保证计算的精确性。它使用了任意精度的整数运算,不会产生舍入误差。
此外,BigDecimal还提供了丰富的数值操作方法和运算符重载,方便进行高精度的数值计算。
总结起来,BigDecimal能够精确计算是因为它采用了十进制表示方法,并且提供了完善的运算规则,避免了浮点数舍入误差的问题。
相关问题
BigDecimal如何做到精确
BigDecimal 是 Java 中用于处理高精度数字的类,它通过使用任意精度的小数来解决浮点数精度问题。BigDecimal 内部使用一个整数数组来存储小数,这个数组可以存储任意长度的小数。这样就能够保证计算结果的精度不会丢失。
另外,BigDecimal 支持对小数进行精确的四则运算,包括加、减、乘、除。这些运算会保持计算结果的精度不变,而且还可以通过设置舍入模式来控制计算结果的舍入规则,以满足不同的需求。
因此,使用 BigDecimal 可以在计算过程中保持高精度,避免了浮点数精度损失的问题。
为什么慎用BigDecimal
慎用BigDecimal是因为它的性能相对较差,特别是在处理庞大、复杂的运算时更明显。在一般精度的计算中,没有必要使用BigDecimal,可以使用double或float。只有在需要精确的小数计算,以解决浮点型运算精度失真问题时才使用BigDecimal。 <span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [Java常用API详解(Object、Objects、StringBuilder、Math、System、BigDecimal)](https://blog.csdn.net/qq_43751200/article/details/123531457)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *2* [千万注意:线上慎用 BigDecimal ,坑的差点被开了](https://blog.csdn.net/qq_42914528/article/details/128168551)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]