怎么判断bigdecimal判断大小是否为0

2688人阅读
一句话,BigDecimal转为字符串,匹配正则表达式,
不废话,代码:
import java.math.BigD
import java.util.regex.P
public class test {
public static void main(String[] args) {
BigDecimal a = new BigDecimal(1000);
BigDecimal b = new BigDecimal(99.999);
String integerStr = a+&& ;
String doubleStr = b+&&;
System.out.println(Pattern.matches(&\\d+&, integerStr));//判断是否可转换为Integer(short即long可以发散,就是改正则)
System.out.println(Pattern.matches(&\\d+\\.+&, integerStr));//判断是否可转换为Double
&&script type=&text/javascript&&&!--
google_ad_client = &ca-pub-8447&;
/* cnblogs 首页横幅 */
google_ad_slot = &&;
google_ad_width = 728;
google_ad_height = 90;
//--&&/script&&script type=&text/javascript& src=&/pagead/show_ads.js&&&/script&
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:9820065次
积分:100353
积分:100353
排名:第11名
原创:361篇
转载:4760篇
译文:17篇
评论:1797条
文章:21篇
阅读:50582
文章:15篇
阅读:38447
文章:22篇
阅读:213753
(4)(8)(28)(21)(47)(1)(1)(8)(170)(814)(1012)(1351)(969)(262)(207)(2)(3)(2)(61)(19)(2)(28)(22)(37)(1)(3)(4)(6)(9)(10)(26)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'一、简介Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。
二、构造器描述 BigDecimal(int) & & & 创建一个具有参数所指定整数值的对象。
BigDecimal(double) 创建一个具有参数所指定双精度值的对象。
BigDecimal(long) & &创建一个具有参数所指定长整数值的对象。
BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象。
三、方法描述 add(BigDecimal) & & & &BigDecimal对象中的值相加,然后返回这个对象。
subtract(BigDecimal)
BigDecimal对象中的值相减,然后返回这个对象。
multiply(BigDecimal) &BigDecimal对象中的值相乘,然后返回这个对象。
divide(BigDecimal) & & BigDecimal对象中的值相除,然后返回这个对象。
toString() & & & & & & & &将BigDecimal对象的数值转换成字符串。
doubleValue() & & & & &将BigDecimal对象中的值以双精度数返回。
floatValue() & & & & & & 将BigDecimal对象中的值以单精度数返回。
longValue() & & & & & & 将BigDecimal对象中的值以长整数返回。
intValue() & & & & & & & 将BigDecimal对象中的值以整数返回。
四、格式化及例子由于NumberFormat类的format()方法可以使用BigDecimal对象作为其参数,可以利用BigDecimal对超出16位有效数字的货币值,百分值,以及一般数值进行格式化控制。
以利用BigDecimal对货币和百分比格式化为例。首先,创建BigDecimal对象,进行BigDecimal的算术运算后,分别建立对货币和百分比格式化的引用,最后利用BigDecimal对象作为format()方法的参数,输出其格式化的货币值和百分比。
public static void main(String[] args) {
NumberFormat currency = NumberFormat.getCurrencyInstance(); //建立货币格式化引用
NumberFormat percent = NumberFormat.getPercentInstance();
//建立百分比格式化引用
percent.setMaximumFractionDigits(3); //百分比小数点最多3位
BigDecimal loanAmount = new BigDecimal("15000.48"); //贷款金额
BigDecimal interestRate = new BigDecimal("0.008"); //利率
BigDecimal interest = loanAmount.multiply(interestRate); //相乘
System.out.println("贷款金额:\t" + currency.format(loanAmount));
System.out.println("利率:\t" + percent.format(interestRate));
System.out.println("利息:\t" + currency.format(interest));
运行结果如下:
¥15,000.48
五、BigDecimal比较BigDecimal是通过使用compareTo(BigDecimal)来比较的,具体比较情况如下:
public static void main(String[] args) {
BigDecimal a = new BigDecimal("1");
BigDecimal b = new BigDecimal("2");
BigDecimal c = new BigDecimal("1");
int result1 = a.compareTo(b);
int result2 = a.compareTo(c);
int result3 = b.compareTo(a);
System.out.println(result1);
System.out.println(result2);
System.out.println(result3);
打印结果是:-1、0、1,即左边比右边数大,返回1,相等返回0,比右边小返回-1。注意不能使用equals方法来比较大小。
使用BigDecimal的坏处是性能比double和float差,在处理庞大,复杂的运算时尤为明显,因根据实际需求决定使用哪种类型。
---------------------------------------------------------------------------------Blog:/linjiqin/Hadoop交流群()、Java+Oracle交流群()
题外话:本人来自铁观音的发源地&&泉州安溪,有需要正宗安溪铁观音的友友欢迎Q我:。
阅读(...) 评论()7105人阅读
Java(16)
& & & Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中若需要精确的计算结果则要用java.math.BigDecimal类。
BigDecimal所创建的是对象,故我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。
下面介绍BigDecimal的构造方法
BigDecimal(int) & & & & & 创建一个具有参数所指定整数值的对象。BigDecimal(double) & 创建一个具有参数所指定双精度值的对象。BigDecimal(long) & & & &创建一个具有参数所指定长整数值的对象。BigDecimal(String) & &创建一个具有参数所指定以字符串表示的数值的对象。
12BigDecimal a =new BigDecimal(&1.22&);System.out.println(&a values is:&+a);通过上面的步骤我们利用String构造的方式创建了一个BigDecimal实例化对象a,这时请问上面的输出是多少?很多人可能觉得那输出结果不就是1.22嘛,可实际结果呢?正确输出:1.3125既然是精确的大数类实现,它自然会有自己的特别之处,下来看看JDK的解释:参数类型为double的构造方法的结果有一定的不可预知性。有人可能认为在Java中写入newBigDecimal(0.1)所创建的BigDecimal正好等于 0.1(非标度值 1,其标度为 1),但是它实际上等于0.1015625。这是因为0.1无法准确地表示为 double(或者说对于该情况,不能表示为任何有限长度的二进制小数)。这样,传入到构造方法的值不会正好等于 0.1(虽然表面上等于该值)。另一方面,String 构造方法是完全可预知的:写入 newBigDecimal(“0.1”) 将创建一个 BigDecimal,它正好等于预期的 0.1。因此,比较而言,&通常建议优先使用String构造方法。&当double必须用作BigDecimal的源时,请注意,此构造方法提供了一个准确转换;它不提供与以下操作相同的结果:先使用Double.toString(double)方法,然后使用BigDecimal(String)构造方法,将double转换为String。要获取该结果,请使用static valueOf(double)方法。BigDecimal常用方法描述add(BigDecimal) & & & & & &BigDecimal对象中的值相加,然后返回这个对象。subtract(BigDecimal) & &BigDecimal对象中的值相减,然后返回这个对象。multiply(BigDecimal) & &BigDecimal对象中的值相乘,然后返回这个对象。divide(BigDecimal) & & & &BigDecimal对象中的值相除,然后返回这个对象。toString() & & & & & & & & & & & & 将BigDecimal对象的数值转换成字符串。doubleValue() & & & & & & & & 将BigDecimal对象中的值以双精度数返回。floatValue() & & & & & & & & & & 将BigDecimal对象中的值以单精度数返回。longValue() & & & & & & & & & & 将BigDecimal对象中的值以长整数返回。intValue() & & & & & & & & & & & 将BigDecimal对象中的值以整数返回。示例用法:
BigDecimala=newBigDecimal(&1.11&);
BigDecimalb=newBigDecimal(&2.22&);
System.out.println(&
a + b = &+a);
& & & & 上面讲解了BigDecimal的用法,下面再介绍常用的几种对BigDecimal进行格式化的方法
& & & & 由于NumberFormat类的format()方法可以使用BigDecimal对象作为其参数,可以利用BigDecimal对超出16位有效数字的货币值,百分值,以及一般数值进行格式化控制。
& & & & &以利用BigDecimal对货币和百分比格式化为例。首先,创建BigDecimal对象,进行BigDecimal的算术运算后,分别建立对货币和百分比格式化的引用,最后利用BigDecimal对象作为format()方法的参数,输出其格式化的货币值和百分比。
public static void main(String[] args) {
NumberFormat currency = NumberFormat.getCurrencyInstance(); //建立货币格式化引用
NumberFormat percent = NumberFormat.getPercentInstance();
//建立百分比格式化引用
percent.setMaximumFractionDigits(3); //百分比小数点最多3位
BigDecimal loanAmount = new BigDecimal(&15000.48&); //贷款金额
BigDecimal interestRate = new BigDecimal(&0.008&); //利率
BigDecimal interest = loanAmount.multiply(interestRate); //相乘
System.out.println(&贷款金额:\t& + currency.format(loanAmount));
System.out.println(&利率:\t& + percent.format(interestRate));
System.out.println(&利息:\t& + currency.format(interest));
贷款金额: ¥15,000.48 利率: 0.8% 利息: ¥120.00
下面介绍如何对BigDecimal进行比较大小
publicstaticvoidmain(String[]args){
BigDecimala=newBigDecimal(&1&);
BigDecimalb=newBigDecimal(&2&);
BigDecimalc=newBigDecimal(&1&);
pareTo(b);
pareTo(c);
pareTo(a);
System.out.println(result1);
System.out.println(result2);
System.out.println(result3);
运行结果-1、0、1
即左边比右边数大,返回1,相等返回0,比右边小返回-1。注意&不可用equals进行相等的判断,equals
比较是两个BigDecimal对象的地址。&
在需要精确的小数计算时再使用BigDecimal,BigDecimal的性能比double和float差,在处理庞大,复杂的运算时尤为明显。故一般精度的计算没必要使用BigDecimal。尽量使用参数类型为String的构造函数。&BigDecimal都是不可变的(immutable)的,&在进行每一次四则运算时,都会产生一个新的对象&,所以在做加减乘除运算时要记得要保存操作后的值。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:141934次
积分:1774
积分:1774
排名:千里之外
原创:52篇
评论:22条
(4)(3)(2)(1)(5)(3)(1)(12)(3)(10)(5)(1)(1)(2)(1)(2)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'6101人阅读
JAVA(10)
1.我之前用来判断Bigdecimal类型是否等于0的方法
b.equals(BigDecimal.ZERO);
用equals方法和BigDecimal.ZERO进行比较。
2.上面方法存在的问题
有一天,调用这个这句代码的时候,传入的确实是0,但却返回false
查看源代码发现:
Bigdecimal的equals方法不仅仅比较值的大小是否相等,首先比较的是scale(scale是bigdecimal的保留小数点位数,比如 new Bigdecimal(&1.001&),scale为3),也就是说,不但值得大小要相等,保留位数也要相等,equals才能返回true。
Bigdecimal b = new Bigdecimal(&0&) 和 Bigdecimal c = new Bigdecimal(&0.0&),用equals比较,返回就是false。
Bigdecimal.ZERO的scale为0。
所以,用equals方法要注意这一点。
3.用b.compareTo(BigDecimal.ZERO)==0,可以比较是否等于0,返回true则等于0,返回false,则不等于0
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:50045次
排名:千里之外
原创:17篇
(1)(1)(4)(2)(1)(1)(1)(1)(2)(2)(2)(1)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'求结!基本是在BigDecimal(0.0);这里错了!【java吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:656,673贴子:
求结!基本是在BigDecimal(0.0);这里错了!收藏
import java.math.BigDpublic class BigDecimal {
*/ public static void main(String[] args) {
// TODO Auto-generated method stub
BigDecimal sum=new BigDecimal(0.0);
BigDecimal factorial =new BigDecimal(1.0);
while(i&=20){
sum =sum.add(factorial);
factorial =factorial.multiply(new BigDecimal(1.0/i));
System.out.println("1+1/2!+1/3!...1/20!的计算结果等于:\n"+sum);
2017java学习来上市公司博为峰学java,入学即签就业协议,不就业不收费,查看java课程!java好学吗?java课程来博为峰学,java工程师就业年薪十几万!
又是歧义类名的问题你自己干什么弄个类也叫 BigDecimal ?换个名字吧
大家好像都对自己取的类名没有自信。
求高手帮忙啊!!!!!
import java.math.BigDimport java.math.MathC/** * *
02/08/2012 */public class Sum {
private static final BigDecimal ONE = new BigDecimal("1.0");
public static void main(String[] args) {
BigDecimal sum = new BigDecimal("0.0");
BigDecimal factorial = ONE;
for(int i=1; i&=20; i++) {
factorial = factorial.multiply(BigDecimal.valueOf((long)i));
sum = sum.add(ONE.divide(factorial, MathContext.DECIMAL128));
System.out.println("1+1/2!+1/3!...1/20! = " + sum + "\n");
BigDecimal传入double类型的值不好传String类型
package java300;import java.math.BigDpublic class Example3 {public static void main(String[] args) {BigDecimal sum = new BigDecimal(0.0);BigDecimal num = new BigDecimal(1.0);int i = 1;while(i &= 20){sum = sum.add(num);++num = num.multiply(new BigDecimal(1/i));}System.out.println(&1/1 + 1/2 + 1/3 + …… + 1/20的和为:& + sum);}}
登录百度帐号推荐应用}

我要回帖

更多关于 bigdecimal 非空判断 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信