BigDecimal类的简单用法

Java BigInteger类、BigDecimal类 例如,当创建一个BigDecimal对象时,如果传入的字符串是"123.4567",那么在内部,BigDecimal会将其转换成一个整数数组,数组中的元素分别对应于'1','2','3','4','5','6','7'这些数字,并且记录下小数点后有四位数字。这个数组是按照从最低位到最高位的顺序存储的,即数组的第一个元素存储的是大整数的最低位,而最后一个元素存储的是大整数的最高位。需要注意的是,在使用BigDecimal时,需要注意其精度和舍入控制问题,以确保计算结果的准确性。的高1位为n-1)。 阅读详情

一提到Java里面的商业计算,我们都知道不能用float和double,因为他们无法进行精确计算。但是Java的设计者给编程人员提供了一个很有用的类BigDecimal,他可以完善float和double类无法进行精确计算的缺憾。BigDecimal类位于java.maths类包下。首先我们来看下如何构造一个BigDecimal对象。它的构造函数很多,我挑最常用的两个来演示一下:一个就是BigDecimal(double val),另一个就是BigDecimal(String str)。这两个看上去没什么太大区别,但是正像API描述中说的那样:

[c-sharp]  view plain copy print ?
  1. /*The results of this constructor can be somewhat unpredictable. One might assume that  
  2. new BigDecimal(.1) is exactly equal to .1, but it is actually equal  
  3. to .1000000000000000055511151231257827021181583404541015625. This is so because .1  
  4. cannot be represented exactly as a double (or, for that matter, as a binary fraction  
  5. of any finite length). Thus, the long value that is being passed in to the constructor  
  6. is not exactly equal to .1, appearances nonwithstanding. 
  7. The (String) constructor, on the other hand, is perfectly predictable: new BigDecimal 
  8. (".1") is exactly equal to .1, as one would expect. Therefore, it is generally  
  9. recommended that the (String) constructor be used in preference to this one.*/  

也就是说利用double作为参数的构造函数,无法精确构造一个BigDecimal对象,需要自己指定一个上下文的环境,也就是指定精确位。而利用String对象作为参数传入的构造函数能精确的构造出一个BigDecimal对象。请看下面的代码:

[java]  view plain copy print ?
  1. import java.math.*;  
  2.   
  3. public class TestBigDecimal {  
  4.     public static void main(String args[]){  
  5.         BigDecimal bd = new BigDecimal("10.123");  
  6.         BigDecimal bd1 = new BigDecimal(10.123);  
  7.           
  8.   
  9.         System.out.println(bd +"/n"+ bd1);  
  10.   
  11.     }  
  12. }  

输出:

[java]  view plain copy print ?
  1. 10.123  
  2. 10.1229999999999993320898283855058252811431884765625  

所以我们在选择构造函数时,要看具体需求而定。

另外,很多人会问到怎么将基本类型,如int,float,double,long,和BigDecimal对象相互转换。很简单:

基本类型通过构造函数转换成对应的BigDecimal对象,而BigDecimal类提供了诸如intValue(), floatValue(), doubleValue(), longValue()方法来将BigDecimal对象转换成对应的值。

关于BigDecimal是如何计算的,我以论坛中一个人的提问帖子为例,来简单的写出BigDecimal的运算方法。题目是:李白无事街上走,提壶去买酒。遇店加一倍,见花喝一斗,五遇花和店,喝光壶中酒,试问李白壶中原有多少斗酒?

这道题应该是从后往前推,并且要逆运算,最后得出原有酒的体积。

[java]  view plain copy print ?
  1. import java.math.*;  
  2.   
  3. public class Libai {  
  4.     public static void main(String args[]){  
  5.         BigDecimal volumn = new BigDecimal("0");  
  6.           
  7.         for (int i=0; i<5;  i++){             
  8.             volumn = volumn.add(new BigDecimal("1"));  
  9.             volumn = volumn.divide(new BigDecimal("2"));  
  10.         }  
  11.           
  12.         System.out.print(volumn);  
  13.     }  
  14. }  

结果:

[java]  view plain copy print ?
  1. 0.96875  

CST实战:5分钟搞定圆极化天线轴比分析(含远场设置技巧) 本文提供了一份CST Studio Suite圆极化天线轴比分析的实战指南。文章详细讲解了轴比的概念与工程标准,并重点演示了如何正确设置远场监视器以获取Axial Ratio数据,包括关键步骤与后处理技巧。最后,通过植入式天线在生物组织环境中的案例,分析了复杂环境对轴比性能的影响及优化思路。 阅读详情

相关推荐

通俗易通解释SLAM问题的数学描述:运动方程和观测方程

高翔博士在他的《视觉SLAM十四讲》中把SLAM问题的数学描述抽象成了两个数学方程,以下对此做个总结,并且对此做一些通俗易懂的解释: 一、方程的总体形式 作为理性层次的描述,我们引入数学方程来描述SLAM过程,其中第一个方程叫做运动方程、第二个方程叫做观测方程,想象一下我们在研究SLAM的时候肯定需要观测机器人(无人汽车、无人机等都可以统称为机器人)的运动(画面感很强哈哈),这样很容易理解并且记忆这两个方程的名称和意义: 二、变量的含义 我们看到,这两个方程中有大量的英文字母作为变量存在其中,下面介绍一下

weixin_41855010的博客 7114

BigDecimal和double类型相互转换

BigDecimal和double类型相互转换

strggle_bin的博客 3482

Fortran基础编程(3)——格式化输出

本篇推文将进一步讲解Fortran基础语法中格式化输出与声明部分,让我们的代码更加美观起来吧~

qq_45715554的博客 3826

BigDecimal和double类型相互转换,一行搞定

BigDecimal类型和double类型的值相互转换 1.BigDecimal转double,使用BigDecimal类里面doubleValue()方法: BigDecimal latitude = 39.97268600; double latitudeDou = latitude.doubleValue() 2.double转BigDecimal,使用BigDecimal类里面valueOf()方法: double latitudeDou = 39.97268600; BigDecimal lat

angang12的博客 6万+

set_data_check专题[使用,report_timing,setup/hold检查]

set_data_check用于约束『数据-对-数据』的『建立保持』时间检查,通常被称为非时序约束 ( non-sequential constraints ), 理论上set_data_check 可以设在任意的两个data pin 上,其中一个pin 称为 constrained pin 类似于寄存器的data pin, 另一个pin 称为related pin 类似于寄存器的clock pin.

cy413026的博客 1万+

代码详解——Transformer

对于一个序列,在 time_step 为 t 的时刻,我们的解码输出应该只能依赖于 t 时刻之前的输出,而不能依赖 t 之后的输出。当 Decoder 的输入矩阵和 Mask 矩阵输入矩阵包含 “ I have a cat” (0, 1, 2, 3, 4) 五个单词的表示向量,Mask 是一个 5×5 的矩阵。然后判断是否传入的mask, 如果有mask (mask参数值不为None),则把mask为0的位置,将对应位置的attn的值设为无穷小的负数。可以发现得到的输出和输入的K,Q,V的大小相同。

zyw2002的博客 7213

bigdecimal 转 double_老大说:谁要再用double定义商品金额,就自己收拾东西走

先看现象涉及诸如float或者double这两种浮点型数据的处理时,偶尔总会有一些怪怪的现象,不知道大家注意过没,举几个常见的栗子:典型现象(一):条件判断超预期System.out.println(1f==0.9999999f);//打印:falseSystem.out.println(1f==0.99999999f);//打印:true纳尼?典型现象(二)...

weixin_39639643的博客 351

手把手教你五种方案配置Obsidian免费同步,全平台通用(支持Alist/OpenList)

Obsidian是一款优秀的Markdown笔记工具,但官方同步服务每年近700元让人望而却步💸 本文整理了5种免费同步方案,涵盖苹果生态专属方案、多网盘插件同步、版本管理同步、点对点同步、自建实时同步等不同场景📱💻 每种方案都附有详细配置步骤,助你找到最适合的同步方式✨

XiaoqiangClub的博客 1832

BigDecimal类

11

ProgramApeOfHeaven的博客 539

特殊通信领域场景应用:基于Simulink的数字预失真(DPD)算法仿真建模示例

增益压缩:高功率输入时输出信号的增益下降。相位失真:输入信号的相位随功率变化而改变。带外干扰:非线性失真会引入额外的频谱分量,影响邻道信号。多项式模型:用多项式拟合功率放大器的非线性特性。查找表(LUT):通过离线训练生成预失真映射表。自适应算法:实时调整预失真参数以动态补偿失真。发送端:生成随机比特流并调制为射频信号。预失真模块:对输入信号进行预失真处理。功率放大器模块:模拟非线性失真。接收端:解调信号并评估误码率(BER)。

xiaoheshang_123的博客 272

点云配准SIFT+SI+RANSAC+ICP

Spin Image(SI)是一种用于点云数据描述的特征描述子,广泛应用于三维点云配准、识别和重建等领域。它能够捕捉点云中的局部几何信息,具有旋转不变性和部分平移不变性等优点,是一种非常强大的特征描述子。Spin Image是一种强大的点云特征描述子,具有旋转不变性、局部几何信息捕捉等优点,适用于点云配准、目标识别和三维重建等多个领域。通过合理选择局部区域、建立参考框架和计算描述子,可以充分利用Spin Image描述点云的特征,从而实现各种三维场景分析和处理任务。

点云兔子的博客 558

java bigdecimal赋值_Java中BigDecimal类的简单用法

本文实例讲述了Java中BigDecimal类的简单用法,是Java程序设计中非常实用的技巧,分享给大家供大家参考。具体用法分析如下:一般来说,一提到Java里面的商业计算,我们都知道不能用float和double,因为他们无法进行精确计算。但是Java的设计者给编程人员提供了一个很有用的类BigDecimal,他可以完善float和double类无法进行精确计算的缺憾。BigDecimal类位于...

weixin_39989949的博客 5469

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java传bigdecimal_Java中BigDecimal类的简单用法

这篇文章主要介绍了Java中BigDecimal类的简单用法,是Java应用程序开发中非常实用的技巧,本文以实例形式对此进行了简单的分析,需要的朋友可以参考下本文实例讲述了Java中BigDecimal类的简单用法,是Java程序设计中非常实用的技巧,分享给大家供大家参考。具体用法分析如下:一般来说,一提到Java里面的商业计算,我们都知道不能用float和double,因为他们无法进行精确计算。...

weixin_33672838的博客 291

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

java中bigdecimal的用法_Java中BigDecimal类的简单用法

本文实例讲述了Java中BigDecimal类的简单用法,是Java程序设计中非常实用的技巧,分享给大家供大家参考。具体用法分析如下:一般来说,一提到Java里面的商业计算,我们都知道不能用float和double,因为他们无法进行精确计算。但是Java的设计者给编程人员提供了一个很有用的类BigDecimal,他可以完善float和double类无法进行精确计算的缺憾。BigDecimal类位于...

weixin_42437253的博客 323

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

BigDecimal类详解

在 Java 编程中,处理浮点数时经常会遇到精度问题。为了解决这个问题,Java 提供了一个BigDecimal类,它提供了精确的浮点数运算。本文将详细介绍BigDecimal类的使用方法和一些常见场景。

沉梦听雨的博客 2191

java bigdecimal赋值_Java中BigDecimal类介绍及用法

Java中提供了大数字(超过16位有效位)的操作类,即 java.math.BinInteger 类和 java.math.BigDecimal 类,用于高精度计算.其中 BigInteger 类是针对大整数的处理类,而 BigDecimal 类则是针对大小数的处理类.BigDecimal 类的实现用到了 BigInteger类,不同的是 BigDecimal 加入了小数的概念.float和Dou...

weixin_39911998的博客 1万+

System类、BigDecimal类、Calendar类 用法详解

具体使用时,状态码的具体含义可以由程序员自定义约定,也可以遵循某些标准或操作系统约定的状态码含义。在实际应用中,状态码的具体选择应该根据程序的具体需求和上下文来决定,以便于后续的程序调试、错误处理或者状态监控。类是Java中的一个核心类,提供了访问与系统相关的一些属性和方法。它提供了高精度的算术运算,适用于需要精确计算或者不希望因为浮点数计算带来的精度问题而影响计算结果的场景。类允许我们进行日期字段(如年、月、日)的操作,还可以进行日期之间的计算和比较。:增加或减少指定字段的值,而不影响更大的字段。

weixin_64618449的博客 1029

bigdecimal类_BigDecimal类的常见陷阱以及如何避免它们

bigdecimal类When doing business calculations in Java, especially when it comes to currencies, you would preferably use the java.math.BigDecimal class to avoid the problems related to floating-point ari...

weixin_26746861的博客 6260

JavaAPI常用类型(包装类、BigDecimal类)

java语言是面向对象的语言,但是其中的八大基本数据类型不符合面向对象的特征。因此java为了弥补这样的缺点,为这八种基本数据类型专门设计了八种符合面向对象特征的的类型,这八种具有面向对象特征的类型,统称为包装类,英文单词:wrapper class。包装类,就是在类的内部,维护了一个基本数据类型的成员变量,以及其他方法,常量等。比如int对应的包装类Integer的部分源码如下://.....Byte。

NGC2237999的博客 1062

java BigDecimal类的用法

未完待续。。。

qq_34670974的博客 93
上一篇: Oracle中的BLOB和CLOB
下一篇: JS的类型转换和float取n位小数
Cookie-kimi
博客等级 码龄14年 20粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值