java 淘宝商品评价计算算法

package com.zeelan.app.score;


import java.io.Serializable;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Random;


import com.zeelan.app.IKAnlyzer.AnalyzerUtil;


import cc.zeelan.app.entity.count.CountProductEvaluate;


/**
 * 商品评分
 * @author witts
 * @project evaluate-utils
 * @package com.zeelan.app.score
 * @version 1.0
 * @message  林花谢了春红,太匆匆。无奈朝来寒雨,晚来风
 */
public class ProductScore implements Serializable {
 
	private static final long serialVersionUID = 8143504152635422263L;  
	
	private static final double PRODUCT_SCORE=5.0;//商品综合评分 
	
	 
	private static final double BABY_MAKE_UP=0.837;//宝贝评价计算占比(0.837/千)
	private static final double SELLER_MAKE_UP=0.113;//卖家态度计算占比(0.113/千)  
	
	private static final double LOGISTICS_MAKE_UP=0.0278;//物流评价计算占比(0.0278/万)
	private static final double PLATFROM_CASHA=0.0037;//平台影响分A(0.0037/万)
	private static final double PLATFROM_CASHB=0.0185; //平台影响分B (0.0185/万)
	
	private static final double PLATFROM_BASIC=4.7463;//最高分
	
	/**
	 * double处理
	 * @param val
	 * @return
	 */
	public double toDouble(double val) { 
		BigDecimal bigDe=new BigDecimal(val);
		return bigDe.setScale(2, RoundingMode.HALF_UP).doubleValue();
	}
	
	/**
	 * 评价分计算公式
	 *  宝贝评价 0.837(千分比) 5
	 *  卖家态度 0.113(千分比) 4
	 *  物流服务 0.0278(万分比) 3
	 *  平台影响 0.0037(万分比) 2
	 *  平台影响 0.0185(万分比) 1
	 * @param babyMark 宝贝描述
	 * @param sellerMark 商家态度
	 * @param logisticsMark 物流服务
	 * @return  5分×0.837+4分×0.113+3分×0.0278+2分×0.0037+1分×0.0185 =4.7463  
	 */
	public BigDecimal avg(int babyMark,int sellerMark,int logisticsMark) {     
		double value=babyMark*BABY_MAKE_UP + (sellerMark-1)*SELLER_MAKE_UP+ (logisticsMark-2)*LOGISTICS_MAKE_UP+ (2*PLATFROM_CASHA)+ (1*PLATFROM_CASHB);   
		BigDecimal result = new BigDecimal(value);     
		if(result.doubleValue() == PLATFROM_BASIC) {//最高分
			return  result.setScale(0, RoundingMode.HALF_UP); 
		} 
       	return  result.setScale(2, RoundingMode.HALF_UP); 
	}   
	 
	public static void main(String[] args) {   
		 double scoreVal=score.avg(5,5,5).doubleValue();
		 System.out.println(scoreVal+ "   "+score.grads(scoreVal)); 
	} 
	
	/**
	 * 梯度 
	 * @return
	 */
	public int grads(double avgf) {
		if(avgf<=1.5) return 0;//失望  
		else if(avgf>1.5 && avgf<=2.3) return 1;//不满意 
		else if(avgf>2.3 && avgf<=3.1) return 2;//一般 
		else if(avgf>3.1 && avgf<=4.0) return 3;//满意 
		else if(avgf>4.0 && avgf<=5.0) return 4;//惊喜 
		else return 3;//默认满意 
	}   
}

你可能感兴趣的:(java,淘宝,评价,算法)