计算成本价及要打到某一价位需要的投入
package com.lwf.test;import java.math.BigDecimal;public class Test {public static void main(String[] args) {System.out.println(caculateCB("10.8","1800","6.42","3000"));System.out.println(caculateCT("10.8","1800","6.42","7"));}/** * 计算补仓后的成本价 * @param v1 原始买入价 * @param c1 原始买入数 * @param v2 补仓价即现价 * @param c2 补仓数 * @return 补仓后成本价 */public static String caculateCB(String v1,String c1 ,String v2, String c2){BigDecimal vs1 = new BigDecimal(v1);BigDecimal vs2 = new BigDecimal(v2);BigDecimal cs1 = new BigDecimal(c1);BigDecimal cs2 = new BigDecimal(c2);BigDecimal retVal = ((vs1.multiply(cs1)).add(vs2.multiply(cs2))).divide(cs1.add(cs2), BigDecimal.ROUND_HALF_UP);BigDecimal money = cs2.multiply(vs2);System.out.println("原始购入:" + c1 + "股,原成本价:"+ v1 + ",现价:" + v2 + ",购入:" + c2 + "股" + ",补仓后成本价降为:" + retVal.toString() + ",需要金额:" + money);return retVal.toString() ;}/** * 计算要打到某一成本价需要补多少股 * @param v1 买入价 * @param c1 原始买入数 * @param v2 补仓价即现价 * @param v3 目标成本价即完成补仓后的成本价 * @return 需要补仓的股数 */public static String caculateCT(String v1,String c1,String v2, String v3){BigDecimal vs1 = new BigDecimal(v1);BigDecimal vs2 = new BigDecimal(v2);BigDecimal vs3 = new BigDecimal(v3);BigDecimal cs1 = new BigDecimal(c1);int cv = vs3.compareTo(vs2);if(cv <= 0){return "目标成本价跟现价一致或低于现价!";}int cv1 = vs1.compareTo(vs3);if(cv <=0){return "目标成本价跟原价一致或高于原价!";}Integer retVal =((vs1.subtract(vs3)).multiply(cs1)).divide((vs3.subtract(vs2)),BigDecimal.ROUND_HALF_UP).intValue();String val = String.valueOf((retVal*100/10000)*100);BigDecimal money = vs2.multiply(new BigDecimal(val));System.out.println("原始购入:" + c1 + "股,原成本价:"+ v1 + ",现价:" + v2 + ",想把成本价降为:" + v3 + ",需要购入:" + val + "股" + ",需要金额:" + money );return val;}}?