Groovy Tip 30 BigDecimal数据类型

Groovy语言比Java语言使用起来更为方便的一个地方就是Groovy语言引入了对大小数的运算。当然,我们这里所说的大小数,是指精度超过float类型和double类型的小数。我们可能在某些场合会涉及到对大小数的处理,如果是使用Java语言,我们只能是或者使用java.math.BigDecimal来处理,当然,它的使用是很不方便的;或者干脆自己设计数据类型来解决大小数的问题。但是,在Groovy语言中,我们却能够直接使用BigDecimal数据类型来解决这个问题。

在Groovy语言中,小数的默认类型就是BigDecimal类型。

println 1.2.class.name

运行结果为:

java.math.BigDecimal

说到这里,在做int类型除法运算时,有一个Groovy语言和Java语言的区别需要提出来。

在Java语言中,下面的运算:

System.out.println(1/2);

的结果是0。

如果您想获得小数,必须做如下的运算:

System.out.println((float)1/2);

而在Groovy语言中,下面的运算:

println (1/2)

的结果却是0.5。

如果您想取整,必须做如下的运算:

println ((1/2) as int)

在Groovy语言中,我们也可以使用负指数来表示大小数类型。如:

println 1.2e-39

所以,我们初始化一个大小数可以使用小数的方式和负指数的方式。如:

def bd1 = 1.23044953333333333

def bd2 = 1.3e-45

println bd1.class.name

println bd2.class.name

运行结果为:

java.math.BigDecimal

java.math.BigDecimal

当然,我们还可以通过数值型字符串来初始化一个大小数。如:

def bd3 = '1.3e-40' as BigDecimal

def bd4 = new BigDecimal('1.3e-40')

println bd3.class.name

println bd4.class.name

运行结果为:

java.math.BigDecimal

java.math.BigDecimal

时间: 2024-09-19 23:57:09

Groovy Tip 30 BigDecimal数据类型的相关文章

Groovy Tip 1 ==、equals及其他

我们说基于Groovy语言的Java项目开发是一个敏捷的开发,除了我们使用Grails作为Web开发平台,Groovy语言本身就提供了很多敏捷的地方. 我们知道,在Java语言中,判断两个字符串的值是否相等,我们使用equals方法,而"=="作为判断两个对象引用是否相同的符号.事实证明,我们使用equals方法多过使用"=="符号,特别是在字符串的使用中. 在实际编码的过程中,形如: if(abc1.equals(abc2)) { -- } 这样的if语言特别多,

Groovy Tip 5:数组

一.数组的定义及赋初值 在Groovy语言中,数组的定义和Java语言中一样. def a = new String[4] def nums = newint[10] def objs = new Object[3] 然后赋值也一样: a[0] = 'a' a[1] = 'b' a[2] = 'c' a[3] = 'd' 所不同的在于在数组定义的时候赋初值. 在Java语言里,对一个字符串数组这样定义: String[] strs = new String[]{'a','b','c','d'};

Groovy Tip 4:对象非空判断及“?”运算符

对于一个Domain类对象,如下面的例子: class Empl { String name } 我们需要对它进行操作,比如打印"name"属性的值,我们首先要对它进行非 空判断,如下: def em if(em) { println"name: $em.name" } em = new Empl() em.name = 'Tom' if(em) { println"name: $em.name" } 很显然,如果不做非空判断,那么在第一个pri

Groovy Tip 3:如何在if条件语句中判断对象为空

在Java语言编程中,对对象的非空判断是一个永恒的话题.例如,我们经常需要对一个字 符串进行如下的判断: if(str!=null&&!str.equals("")) { ...... } 输入这样的语句的确使人生厌,而且有时候还会忘掉输入"!str.equals ("")"语句中的"!"导致代码出现逻辑错误. 而敏捷的Groovy语言开发就不需要我们担心这样的问题.同样的判断语句,我们只需要输 入下面的代码:

Groovy Tip 2:each方法和break

在Groovy这样的动态语言中,闭包是其中的一个重要武器.而这些语言的开发者自然不会 放弃使用这些武器,我们可以看到在Groovy语言的集合类中,广泛的使用了闭包.其中, each方法就是这样一个使用闭包的方法. 我们知道,在Java中,我们使用下面的语句对集合类对象进行遍历: for(int i=0;i<list.size();i++) { System.out.println(list.get(i)) } 而在Groovy语言中,我们使用each方法对集合类对象进行遍历: list.each

Groovy Tip 37 字符串和数字之间的转化

字符串和数字之间的转化是我们在项目中必然要碰到的问题,因为我们从用户界面取得的变量的值肯 定是字符串. 所以,我们在项目中经常要做的事情就是:第一,需要对用户的输入进行校验,以判断用户的输入是 否是一个数字:第二,如果是的话,我们则需要进一步把它转化为数字,以方便我们进行计算. 在Java语言中,我们要判断一个字符串是否是数字,基本上有两种方法,第一是直接进行转化,如果 有Exception抛出,则该字符串非我们所需要的数字.如下面就是一段判定一个字符串是否为整型数字的 代码: public s

Groovy Tip 36 “in”关键字

谈到"in"关键字,在Java语言里很少用到,因为它引入得比较晚,也就是JDK5的增强 for循环.Groovy语言也把这个功能保留了下来,这样,我们可以写一些类似于下面的代码: def list = [1,2,3] for(i in list) { println i } 运行结果为: 1 2 3 这个增强的for循环也可以用在对Map的循环上,如: def map = [a:"1",b:"2"] for(i in map) { println

Groovy Tip 33 方法的参数 二

Map参数是我们在Groovy语言的编码中比较常用的一种参数类型,我们常常会很自然的写出来如下的 代码: t.testMap(a:1) t.testMap(a:1,b:1) t.testMap(a:1,b:1,c:1) new Person(name:'Tom',sex:23) 这些都是Map参数的使用.以此类推,我们也常常希望List参数也有同样的功能,比如,我们有如下 的一个以List对象为参数的方法: class Testor2 { def testList(List list) { pr

Groovy Tip 32 方法的参数 一

Groovy语言在方法的输入参数方面做了很多有益的工作,这些工作有些能提高代码的阅读性,有些能 提供编码的方便和敏捷.在前面的文字中,我们已经陆续的介绍过一些,如<Groovy探索之Map与DSL> .在这个系列中,我们再把一些前面没有提及的一一介绍过来. 首先,是关于调用方法时的括号的使用. 在Groovy语言的编码中,我们可能已经很熟练的使用下面的语句: println 'hello,world' 我们都知道,上面的语句相当于下面的语句: println('hello,world') 这就