public class Money extends Object implements Serializable, Comparable<Money>
| Modifier and Type | Field and Description |
|---|---|
static String |
DEFAULT_CURRENCY_CODE
缺省的币种代码,为CNY(人民币)
|
static int |
DEFAULT_ROUNDING_MODE
缺省的取整模式,为
BigDecimal.ROUND_HALF_EVEN
(四舍五入,当小数为0.5时,则取最近的偶数) |
| Constructor and Description |
|---|
Money()
缺省构造器
创建一个具有缺省金额(0)和缺省币种的货币对象
|
Money(BigDecimal amount)
构造器
创建一个具有金额
amount和缺省币种的货币对象
如果金额不能转换为整数分,则使用缺省取整模式DEFAULT_ROUNDING_MODE取整 |
Money(BigDecimal amount,
Currency currency)
构造器
创建一个具有金额
amount和指定币种的货币对象
如果金额不能转换为整数分,则使用缺省的取整模式DEFAULT_ROUNDING_MODE进行取整 |
Money(BigDecimal amount,
Currency currency,
int roundingMode)
构造器
创建一个具有金额
amount和指定币种的货币对象
如果金额不能转换为整数分,则使用指定的取整模式roundingMode取整 |
Money(BigDecimal amount,
int roundingMode)
构造器
创建一个具有参数
amount指定金额和缺省币种的货币对象
如果金额不能转换为整数分,则使用指定的取整模式roundingMode取整 |
Money(double amount)
构造器
创建一个具有参数
amount指定金额和缺省币种的货币对象
如果金额不能转换为整数分,则使用四舍五入方式取整
注意:由于double类型运算中存在误差,使用四舍五入方式取整的
结果并不确定,因此,应尽量避免使用double类型创建货币类型
例:
assertEquals(999, Math.round(9.995 * 100));
assertEquals(1000, Math.round(999.5));
money = new Money((9.995));
assertEquals(999, money.getCent());
money = new Money(10.005);
assertEquals(1001, money.getCent());
|
Money(double amount,
Currency currency)
构造器
创建一个具有金额
amount和指定币种的货币对象
如果金额不能转换为整数分,则使用四舍五入方式取整
注意:由于double类型运算中存在误差,使用四舍五入方式取整的
结果并不确定,因此,应尽量避免使用double类型创建货币类型
例:
assertEquals(999, Math.round(9.995 * 100));
assertEquals(1000, Math.round(999.5));
money = new Money((9.995));
assertEquals(999, money.getCent());
money = new Money(10.005);
assertEquals(1001, money.getCent());
|
Money(long yuan,
int cent)
构造器
创建一个具有金额
yuan元cent分和缺省币种的货币对象 |
Money(long yuan,
int cent,
Currency currency)
构造器
创建一个具有金额
yuan元cent分和指定币种的货币对象 |
Money(String amount)
构造器
创建一个具有金额
amount元和缺省币种的货币对象 |
Money(String amount,
Currency currency)
构造器
创建一个具有金额
amount元和指定币种currency的货币对象 |
Money(String amount,
Currency currency,
int roundingMode)
构造器
创建一个具有金额
amount元和指定币种currency的货币对象
如果金额不能转换为整数分,则使用指定的取整模式roundingMode取整 |
| Modifier and Type | Method and Description |
|---|---|
Money |
add(Money other)
货币加法
如果两货币币种相同,则返回一个新的相同币种的货币对象,其金额为
两货币对象金额之和,本货币对象的值不变
如果两货币对象币种不同,抛出
java.lang.IllegalArgumentException |
Money |
addTo(Money other)
货币累加
如果两货币币种相同,则本货币对象的金额等于两货币对象金额之和,并返回本货币对象的引用
如果两货币对象币种不同,抛出
java.lang.IllegalArgumentException |
Money[] |
allocate(int targets)
货币分配
将本货币对象尽可能平均分配成
targets份
如果不能平均分配尽,则将零头放到开始的若干份中分配
运算能够确保不会丢失金额零头 |
Money[] |
allocate(long[] ratios)
货币分配
将本货币对象按照规定的比例分配成若干份分配所剩的零头
从第一份开始顺序分配分配运算确保不会丢失金额零头
|
protected void |
assertSameCurrencyAs(Money other)
断言本货币对象与另一货币对象是否具有相同的币种
如果本货币对象与另一货币对象具有相同的币种,则方法返回
否则抛出运行时异常
java.lang.IllegalArgumentException |
int |
compareTo(Money other)
货币比较
比较本货币对象与另一货币对象的大小
如果待比较的两个货币对象的币种不同,则抛出
java.lang.IllegalArgumentException
如果本货币对象的金额少于待比较货币对象,则返回-1
如果本货币对象的金额等于待比较货币对象,则返回0
如果本货币对象的金额大于待比较货币对象,则返回1 |
Money |
divide(BigDecimal val)
货币除法
返回一个新的货币对象,币种与本货币对象相同,金额为本货币对象的金额除以除数
本货币对象的值不变如果相除后的金额不能转换为整数分,使用缺省的取整模式
DEFAULT_ROUNDING_MODE进行取整 |
Money |
divide(BigDecimal val,
int roundingMode)
货币除法
返回一个新的货币对象,币种与本货币对象相同,金额为本货币对象的金额除以除数
本货币对象的值不变如果相除后的金额不能转换为整数分,使用指定的取整模式
roundingMode进行取整 |
Money |
divide(double val)
货币除法
返回一个新的货币对象,币种与本货币对象相同,金额为本货币对象的金额除以除数
本货币对象的值不变如果相除后的金额不能转换为整数分,使用四舍五入方式取整
|
Money |
divideBy(BigDecimal val)
货币累除
本货币对象金额除以除数,并返回本货币对象
如果相除后的金额不能转换为整数分,使用缺省的取整模式
DEFAULT_ROUNDING_MODE进行取整 |
Money |
divideBy(BigDecimal val,
int roundingMode)
货币累除
本货币对象金额除以除数,并返回本货币对象
如果相除后的金额不能转换为整数分,使用指定的取整模式
roundingMode进行取整 |
Money |
divideBy(double val)
货币累除
本货币对象金额除以除数,并返回本货币对象
如果相除后的金额不能转换为整数分,使用四舍五入方式取整
|
String |
dump()
生成本对象内部变量的字符串表示,用于调试
|
boolean |
equals(Money other)
判断本货币对象与另一货币对象是否相等
货币对象与另一货币对象相等的充分必要条件是:
金额相同
币种相同
|
boolean |
equals(Object other)
判断本货币对象与另一对象是否相等
货币对象与另一对象相等的充分必要条件是:
另一对象也属货币对象类
金额相同
币种相同
|
BigDecimal |
getAmount()
获取本货币对象代表的金额数
|
long |
getCent()
获取本货币对象代表的金额数
|
int |
getCentFactor()
获取本货币币种的元/分换算比率
|
Currency |
getCurrency()
获取本货币对象代表的币种
|
boolean |
greaterThan(Money other)
货币比较
判断本货币对象是否大于另一货币对象
如果待比较的两个货币对象的币种不同,则抛出
java.lang.IllegalArgumentException
如果本货币对象的金额大于待比较货币对象,则返回true,否则返回false |
int |
hashCode()
计算本货币对象的杂凑值
|
Money |
multiply(BigDecimal val)
货币乘法
返回一个新的货币对象,币种与本货币对象相同,金额为本货币对象的金额乘以乘数
本货币对象的值不变如果相乘后的金额不能转换为整数分,使用缺省的取整模式
DEFUALT_ROUNDING_MODE进行取整 |
Money |
multiply(BigDecimal val,
int roundingMode)
货币乘法
返回一个新的货币对象,币种与本货币对象相同,金额为本货币对象的金额乘以乘数
本货币对象的值不变如果相乘后的金额不能转换为整数分,使用指定的取整方式
roundingMode进行取整 |
Money |
multiply(double val)
货币乘法
返回一个新的货币对象,币种与本货币对象相同,金额为本货币对象的金额乘以乘数
本货币对象的值不变如果相乘后的金额不能转换为整数分,则四舍五入
|
Money |
multiply(long val)
货币乘法
返回一个新的货币对象,币种与本货币对象相同,金额为本货币对象的金额乘以乘数
本货币对象的值不变
|
Money |
multiplyBy(BigDecimal val)
货币累乘
本货币对象金额乘以乘数,并返回本货币对象
如果相乘后的金额不能转换为整数分,使用缺省的取整方式
DEFUALT_ROUNDING_MODE进行取整 |
Money |
multiplyBy(BigDecimal val,
int roundingMode)
货币累乘
本货币对象金额乘以乘数,并返回本货币对象
如果相乘后的金额不能转换为整数分,使用指定的取整方式
roundingMode进行取整 |
Money |
multiplyBy(double val)
货币累乘
本货币对象金额乘以乘数,并返回本货币对象
如果相乘后的金额不能转换为整数分,则使用四舍五入
|
Money |
multiplyBy(long val)
货币累乘
本货币对象金额乘以乘数,并返回本货币对象
|
protected Money |
newMoneyWithSameCurrency(long cent)
创建一个币种相同,具有指定金额的货币对象
|
protected long |
rounding(BigDecimal val,
int roundingMode)
对BigDecimal型的值按指定取整方式取整
|
void |
setAmount(BigDecimal amount)
设置本货币对象代表的金额数
|
void |
setCent(long cent)
设置货币的分值
|
Money |
subtract(Money other)
货币减法
如果两货币币种相同,则返回一个新的相同币种的货币对象,其金额为
本货币对象的金额减去参数货币对象的金额本货币对象的值不变
如果两货币币种不同,抛出
java.lang.IllegalArgumentException |
Money |
subtractFrom(Money other)
货币累减
如果两货币币种相同,则本货币对象的金额等于两货币对象金额之差,并返回本货币对象的引用
如果两货币币种不同,抛出
java.lang.IllegalArgumentException |
String |
toString()
生成本对象的缺省字符串表示
|
public static final String DEFAULT_CURRENCY_CODE
public static final int DEFAULT_ROUNDING_MODE
BigDecimal.ROUND_HALF_EVEN
(四舍五入,当小数为0.5时,则取最近的偶数)public Money()
public Money(long yuan,
int cent)
yuan元cent分和缺省币种的货币对象yuan - 金额元数cent - 金额分数public Money(long yuan,
int cent,
Currency currency)
yuan元cent分和指定币种的货币对象yuan - 金额元数cent - 金额分数currency - 币种public Money(String amount)
amount元和缺省币种的货币对象amount - 金额,以元为单位public Money(String amount, Currency currency)
amount元和指定币种currency的货币对象amount - 金额,以元为单位currency - 币种public Money(String amount, Currency currency, int roundingMode)
amount元和指定币种currency的货币对象
如果金额不能转换为整数分,则使用指定的取整模式roundingMode取整amount - 金额,以元为单位currency - 币种roundingMode - 取整模式public Money(double amount)
amount指定金额和缺省币种的货币对象
如果金额不能转换为整数分,则使用四舍五入方式取整
注意:由于double类型运算中存在误差,使用四舍五入方式取整的
结果并不确定,因此,应尽量避免使用double类型创建货币类型
例:
assertEquals(999, Math.round(9.995 * 100));
assertEquals(1000, Math.round(999.5));
money = new Money((9.995));
assertEquals(999, money.getCent());
money = new Money(10.005);
assertEquals(1001, money.getCent());
amount - 金额,以元为单位public Money(double amount,
Currency currency)
amount和指定币种的货币对象
如果金额不能转换为整数分,则使用四舍五入方式取整
注意:由于double类型运算中存在误差,使用四舍五入方式取整的
结果并不确定,因此,应尽量避免使用double类型创建货币类型
例:
assertEquals(999, Math.round(9.995 * 100));
assertEquals(1000, Math.round(999.5));
money = new Money((9.995));
assertEquals(999, money.getCent());
money = new Money(10.005);
assertEquals(1001, money.getCent());
amount - 金额,以元为单位currency - 币种public Money(BigDecimal amount)
amount和缺省币种的货币对象
如果金额不能转换为整数分,则使用缺省取整模式DEFAULT_ROUNDING_MODE取整amount - 金额,以元为单位public Money(BigDecimal amount, int roundingMode)
amount指定金额和缺省币种的货币对象
如果金额不能转换为整数分,则使用指定的取整模式roundingMode取整amount - 金额,以元为单位roundingMode - 取整模式public Money(BigDecimal amount, Currency currency)
amount和指定币种的货币对象
如果金额不能转换为整数分,则使用缺省的取整模式DEFAULT_ROUNDING_MODE进行取整amount - 金额,以元为单位currency - 币种public Money(BigDecimal amount, Currency currency, int roundingMode)
amount和指定币种的货币对象
如果金额不能转换为整数分,则使用指定的取整模式roundingMode取整amount - 金额,以元为单位currency - 币种roundingMode - 取整模式public BigDecimal getAmount()
public void setAmount(BigDecimal amount)
amount - 金额数,以元为单位public long getCent()
public void setCent(long cent)
cent - 分值public Currency getCurrency()
public int getCentFactor()
public boolean equals(Object other)
equals in class Objectother - 待比较的另一对象true表示相等,false表示不相等Object.equals(java.lang.Object)public boolean equals(Money other)
other - 待比较的另一货币对象true表示相等,false表示不相等public int hashCode()
hashCode in class ObjectObject.hashCode()public int compareTo(Money other)
java.lang.IllegalArgumentException
如果本货币对象的金额少于待比较货币对象,则返回-1
如果本货币对象的金额等于待比较货币对象,则返回0
如果本货币对象的金额大于待比较货币对象,则返回1compareTo in interface Comparable<Money>other - 另一对象IllegalArgumentException - 待比较货币对象与本货币对象的币种不同public boolean greaterThan(Money other)
java.lang.IllegalArgumentException
如果本货币对象的金额大于待比较货币对象,则返回true,否则返回falseother - 另一对象IllegalArgumentException - 待比较货币对象与本货币对象的币种不同public Money add(Money other)
java.lang.IllegalArgumentExceptionother - 作为加数的货币对象IllegalArgumentException - 如果本货币对象与另一货币对象币种不同public Money addTo(Money other)
java.lang.IllegalArgumentExceptionother - 作为加数的货币对象IllegalArgumentException - 如果本货币对象与另一货币对象币种不同public Money subtract(Money other)
java.lang.IllegalArgumentExceptionother - 作为减数的货币对象IllegalArgumentException - 如果本货币对象与另一货币对象币种不同public Money subtractFrom(Money other)
java.lang.IllegalArgumentExceptionother - 作为减数的货币对象IllegalArgumentException - 如果本货币对象与另一货币对象币种不同public Money multiply(long val)
val - 乘数public Money multiplyBy(long val)
val - 乘数public Money multiply(double val)
val - 乘数public Money multiplyBy(double val)
val - 乘数public Money multiply(BigDecimal val)
DEFUALT_ROUNDING_MODE进行取整val - 乘数public Money multiplyBy(BigDecimal val)
DEFUALT_ROUNDING_MODE进行取整val - 乘数public Money multiply(BigDecimal val, int roundingMode)
roundingMode进行取整val - 乘数roundingMode - 取整方式public Money multiplyBy(BigDecimal val, int roundingMode)
roundingMode进行取整val - 乘数roundingMode - 取整方式public Money divide(double val)
val - 除数public Money divideBy(double val)
val - 除数public Money divide(BigDecimal val)
DEFAULT_ROUNDING_MODE进行取整val - 除数public Money divide(BigDecimal val, int roundingMode)
roundingMode进行取整val - 除数roundingMode - 取整public Money divideBy(BigDecimal val)
DEFAULT_ROUNDING_MODE进行取整val - 除数public Money divideBy(BigDecimal val, int roundingMode)
roundingMode进行取整val - 除数roundingMode - 模型public Money[] allocate(int targets)
targets份
如果不能平均分配尽,则将零头放到开始的若干份中分配
运算能够确保不会丢失金额零头targets - 待分配的份数public Money[] allocate(long[] ratios)
ratios - 分配比例数组,每一个比例是一个长整型,代表
相对于总数的相对数protected void assertSameCurrencyAs(Money other)
java.lang.IllegalArgumentExceptionother - 另一货币对象IllegalArgumentException - 如果本货币对象与另一货币对象币种不同protected long rounding(BigDecimal val, int roundingMode)
val - 待取整的BigDecimal值roundingMode - 取整方式protected Money newMoneyWithSameCurrency(long cent)
cent - 金额,以分为单位public String dump()
Copyright © 2019. All rights reserved.