001    /**
002     * Copyright (c) 2000-2012 Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portal.kernel.util;
016    
017    import java.math.BigDecimal;
018    import java.math.RoundingMode;
019    
020    /**
021     * @author Brian Wing Shun Chan
022     * @author Wesley Gong
023     * @author Calvin Keum
024     */
025    public class BigDecimalUtil {
026    
027            public static double add(double x, double y) {
028                    BigDecimal xBigDecimal = new BigDecimal(String.valueOf(x));
029                    BigDecimal yBigDecimal = new BigDecimal(String.valueOf(y));
030    
031                    BigDecimal resultBigDecimal = xBigDecimal.add(yBigDecimal);
032    
033                    return resultBigDecimal.doubleValue();
034            }
035    
036            public static double divide(
037                    double x, double y, int scale, RoundingMode roundingMode) {
038    
039                    BigDecimal xBigDecimal = new BigDecimal(String.valueOf(x));
040                    BigDecimal yBigDecimal = new BigDecimal(String.valueOf(y));
041    
042                    BigDecimal resultBigDecimal = xBigDecimal.divide(
043                            yBigDecimal, scale, roundingMode);
044    
045                    return resultBigDecimal.doubleValue();
046            }
047    
048            public static double divide(
049                    int x, int y, int scale, RoundingMode roundingMode) {
050    
051                    BigDecimal xBigDecimal = new BigDecimal(String.valueOf(x));
052                    BigDecimal yBigDecimal = new BigDecimal(String.valueOf(y));
053    
054                    BigDecimal resultBigDecimal = xBigDecimal.divide(
055                            yBigDecimal, scale, roundingMode);
056    
057                    return resultBigDecimal.doubleValue();
058            }
059    
060            public static double multiply(double x, double y) {
061                    BigDecimal xBigDecimal = new BigDecimal(String.valueOf(x));
062                    BigDecimal yBigDecimal = new BigDecimal(String.valueOf(y));
063    
064                    BigDecimal resultBigDecimal = xBigDecimal.multiply(yBigDecimal);
065    
066                    return resultBigDecimal.doubleValue();
067            }
068    
069            public static double scale(double x, int scale, RoundingMode roundingMode) {
070                    BigDecimal xBigDecimal = new BigDecimal(String.valueOf(x));
071    
072                    xBigDecimal = xBigDecimal.setScale(scale, roundingMode);
073    
074                    return xBigDecimal.doubleValue();
075            }
076    
077            public static double subtract(double x, double y) {
078                    BigDecimal xBigDecimal = new BigDecimal(String.valueOf(x));
079                    BigDecimal yBigDecimal = new BigDecimal(String.valueOf(y));
080    
081                    BigDecimal resultBigDecimal = xBigDecimal.subtract(yBigDecimal);
082    
083                    return resultBigDecimal.doubleValue();
084            }
085    
086    }