package com.tanpu.fund.utils; import org.apache.commons.lang3.StringUtils; import java.math.BigDecimal; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; /** * @author: zhoupeng * @email: zhoupeng_08@163.com */ public class FundMethod { private static BigDecimal BASE_DIVISOR = new BigDecimal(10000); /** * <p>盈亏金额</p> * 盈亏金额=市值-成本 * * @param market 市值 * @param cost 成本 * @return 盈亏金额 */ public static String profitLossMoney(String market, String cost) { return toBigDecimal(market).subtract(toBigDecimal(cost)).toString(); } /** * <p>市值</p> * 市值=确认份额*最新净值/10000-确认份额*分红比例/10000 * * @param share 确认份额 * @param net 最新净值 * @param bonus 分红比例 * @return 市值 */ public static String marketValue(String share, String net, String bonus) { String market; if (StringUtils.isNotBlank(bonus)) { // TODO 精度待确认 market = toBigDecimal(share).multiply(toBigDecimal(net).subtract(toBigDecimal(bonus))).divide(BASE_DIVISOR, 6).toString(); } else { market = toBigDecimal(share).multiply(toBigDecimal(net)).divide(BASE_DIVISOR, 6).toString(); } return market; } /** * <p>初始权重</p> * 基金初始权重=基金成本/组合基金总成本 * * @param cost 基金成本 * @param allCost 组合基金总成本 * @return 基金初始权重 */ public static String initWeight(String cost, String allCost) { // TODO return toBigDecimal(cost).divide(toBigDecimal(allCost), 2).toString(); } public static String maxNet(List<String> nets) { List<BigDecimal> bNets = nets.stream().map(FundMethod::toBigDecimal).collect(Collectors.toList()); BigDecimal max = Collections.max(bNets); BigDecimal min = Collections.min(bNets); // TODO return max.subtract(min).divide(max, 6).toString(); } public static BigDecimal toBigDecimal(String s) { return new BigDecimal(s); } public static BigDecimal toBigDecimal(double s) { return new BigDecimal(Double.toString(s)); } public static double toDouble(BigDecimal b) { return Double.parseDouble(b.toString()); } }