package nc.vo.pubapp.pattern.pub; import nc.vo.pub.lang.UFDouble; / * 数学运算工具类 * */ public class MathTool {
private MathTool() {
// 缺省构造方法 } / * 数学运算工具类的工厂方法。 * * @return 返回数学运算工具类的实例 * @deprecated 用具体的static方法替代 */ @Deprecated public static MathTool getInstance() {
return new MathTool(); } / * 两个数值的加法算法 数值为null时作为0对待 * * @param d1 要计算的数值1 * @param d2 要计算的数值2 * @return d1加上d2的运算结果 */ public static UFDouble add(UFDouble d1, UFDouble d2) {
UFDouble oper1 = MathTool.nvl(d1); UFDouble oper2 = MathTool.nvl(d2); return oper1.add(oper2); } / * 两个数值值是否相等 数值为null时作为0对待 * * @param d1 要计算的数值1 * @param d2 要计算的数值2 * @return 两个数值相等返回真 */ public static boolean equals(UFDouble d1, UFDouble d2) {
return MathTool.compareTo(d1, d2) == 0; } / * 数值1是否大于数值2 数值为null时作为0对待 * * @param d1 要计算的数值1 * @param d2 要计算的数值2 * @return 数值1大于数值2时返回真 */ public static boolean greaterThan(UFDouble d1, UFDouble d2) {
return MathTool.compareTo(d1, d2) > 0; } / * 数值1是否小于数值2 数值为null时作为0对待 * * @param d1 要计算的数值1 * @param d2 要计算的数值2 * @return 数值1小于数值2时返回真 */ public static boolean lessThan(UFDouble d1, UFDouble d2) {
return MathTool.compareTo(d1, d2) < 0; } / * 两个数值的减法算法 。数值为null时,作为0对待 * * @param d1 要计算的数值1 * @param d2 要计算的数值2 * @return d1减去d2的运算结果 */ public static UFDouble sub(UFDouble d1, UFDouble d2) {
UFDouble oper1 = MathTool.nvl(d1); UFDouble oper2 = MathTool.nvl(d2); return oper1.sub(oper2); } / * 比较两个数值的大小。数值为null时,作为0对待 * * @param d1 要计算的数值1 * @param d2 要计算的数值2 * @return 0 相等 * 小于0 d1小于d2 * 大于0 d1大于d2 */ public static int compareTo(UFDouble d1, UFDouble d2) {
UFDouble oper1 = MathTool.nvl(d1); UFDouble oper2 = MathTool.nvl(d2); return oper1.compareTo(oper2); } / * 比较两个数值的绝对值大小。数值为null时,作为0对待 * * @param d1 要计算的数值1 * @param d2 要计算的数值2 * @return 0 相等 * 小于0 d1小于d2 * 大于0 d1大于d2 */ public static int absCompareTo(UFDouble d1, UFDouble d2) {
UFDouble oper1 = d1; UFDouble oper2 = d2; if (oper1 == null) {
oper1 = UFDouble.ZERO_DBL; } else {
oper1 = oper1.abs(); } if (oper2 == null) {
oper2 = UFDouble.ZERO_DBL; } else {
oper2 = oper2.abs(); } return oper1.compareTo(oper2); } / * 比较两个数值的算术符号是否相反 * * @param d1 要计算的数值1 * @param d2 要计算的数值2 * @return 算术符号相反时返回true */ public static boolean isDiffSign(UFDouble d1, UFDouble d2) {
UFDouble oper1 = MathTool.nvl(d1); UFDouble oper2 = MathTool.nvl(d2); // 如果有一个为零则认为符号相同 if (isZero(oper1) || isZero(oper2)) {
return false; } boolean isNegative1 = UFDouble.ZERO_DBL.compareTo(oper1) < 0; boolean isNegative2 = UFDouble.ZERO_DBL.compareTo(oper2) < 0; return (isNegative1 && !isNegative2) || (!isNegative1 && isNegative2); } / * 如果数值为空,则转化为0返回 * * @param d 要计算的数值 * @return 数值为null时,返回0。否则返回元数值 */ public static UFDouble nvl(UFDouble d) {
return d == null ? UFDouble.ZERO_DBL : d; } / * 数值取绝对值。如果数值为空,则转化为0返回 * * @param d 要计算的数值 * @return 数值的绝对值 */ public static UFDouble abs(UFDouble d) {
return MathTool.nvl(d).abs(); } / * 数值是否为0。数值为null时,作为0对待 * * @param d 要计算的数值 * @return 数值为null或者等于0时返回真 */ public static boolean isZero(UFDouble d) {
return MathTool.equals(d, UFDouble.ZERO_DBL); } / * 数值取反。 * * @param d 要计算的数值 * @return 与参数符号相反的数.如果参数为null,则返回0 */ public static UFDouble oppose(UFDouble d) {
return MathTool.sub(UFDouble.ZERO_DBL, d); } }
讯享网
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/72923.html