java 商品評價計算算法

  

import java.io.Serializable;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.WeakReference;
import java.math.BigDecimal;
import java.math.RoundingMode;/*** 商品評價算法* * @project  icomment* @fileName ProductScore.java* @Description* @author light-zhang* @date 2018年1月15日下午4:44:40* @version 1.0.0*/
public abstract class CommentUtils implements Serializable {private static final long serialVersionUID = 8143504152635422263L;/*************************** 方案一 *******************************************/private static final double baby_ratio = 0.837;// 寶貝評價計算占比(0.837/千)private static final double merchant_ratio = 0.113;// 賣家態度計算占比(0.113/千)private static final double logistics_ratio = 0.0278;// 物流評價計算占比(0.0278/萬)private static final double aplatfrom_ration = 0.0037;// 平臺影響分A(0.0037/萬)private static final double bplatfrom_ration = 0.0185; // 平臺影響分B (0.0185/萬)private static final double basic_score = 4.7463;// 最高分 /**************************************************************************//*** 方案一 寶貝占比較高,防止賣假貨 寶貝評價 0.837(千分比) 5 賣家態度 0.113(千分比) 4 物流服務 0.0278(萬分比) 3 平臺影響* 0.0037(萬分比) 2 平臺影響 0.0185(萬分比) 1* * @return*/public static BigDecimal babyScore(int baby, int merchant, int logistics) {double value = baby * baby_ratio + (merchant - 1) * merchant_ratio + (logistics - 2) * logistics_ratio+ (2 * aplatfrom_ration) + (1 * bplatfrom_ration);final BigDecimal result = getTemp(new BigDecimal(value));if (result.doubleValue() == basic_score) {return result.setScale(0, RoundingMode.HALF_UP);}return result.setScale(1, RoundingMode.HALF_UP);}/*************************** 方案二************************************************/private static final double syn_baby_ratio = 0.35;private static final double syn_merchant_ratio = 0.25;private static final double syn_logistics_ratio = 0.35;private static final double syn_aplatfrom_ration = 0.3;private static final double syn_bplatfrom_ration = 0.2;private static final double syn_basic_score = 4.6;/**************************************************************************//*** 綜合占比率 * @param baby* @param merchant* @param logistics* @return*/public static BigDecimal synthetical(int baby, int merchant, int logistics) {double value = baby * syn_baby_ratio + (merchant - 1) * syn_merchant_ratio+ (logistics - 2) * syn_logistics_ratio + 2 * syn_aplatfrom_ration + 1 * syn_bplatfrom_ration;final BigDecimal result = getTemp(new BigDecimal(value));if (result.doubleValue() == syn_basic_score) {return result.setScale(0, RoundingMode.HALF_UP);}return result.setScale(1, RoundingMode.HALF_UP);}/*** 寶貝梯度 梯度 0失望 1不滿意 2一般 3滿意 4驚喜 默認返回3滿意* * @param avgf* @return*/public static int grads(double avgf) {return (avgf <= 1.5) ? 0: (avgf > 1.5 && avgf <= 2.3) ? 1: (avgf > 2.3 && avgf <= 3.1) ? 2: (avgf > 3.1 && avgf <= 4.0) ? 3 : (avgf > 4.0 && avgf <= 5.0) ? 4 : 3;}private static <T> T getTemp(T classOfType) {ReferenceQueue<T> queue = new ReferenceQueue<T>();WeakReference<T> weakRef = new WeakReference<T>(classOfType, queue);if (null == weakRef.get()) {weakRef = new WeakReference<T>(classOfType);}return weakRef.get();}  public static void main(String[] args) {int baby = 2;int merchant = 2;int logistics = 5;System.out.println("評測1 " + babyScore(baby, merchant, logistics));// 方案一 防止賣假貨采用方案System.out.println("梯度1 >>>>> " + grads(babyScore(baby, merchant, logistics).doubleValue()));System.out.println("評測2 " + synthetical(baby, merchant, logistics));// 方案二 綜合商家,寶貝,物流采用方案System.out.println("梯度2 >>>>>  " + grads(synthetical(baby, merchant, logistics).doubleValue()));} 
}

?

?

?

?

/** ?* 淘寶商品評價 ?* ?* @project icomment ?* @fileName ProductScore.java ?* @Description ?* @author light-zhang ?* @date 2018年1月15日下午4:44:40 ?* @version 1.0.0 ?*/ public abstract class CommentUtils implements Serializable { ????private static final long serialVersionUID = 8143504152635422263L; ????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 staticfinal double PLATFROM_BASIC = 4.7463;// 最高分/** ?????* 評價分計算公式 寶貝評價 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 static BigDecimal avgProductScore(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); ????????final BigDecimal result = new BigDecimal(value); ????????if (result.doubleValue() == PLATFROM_BASIC) {// 最高分 return result.setScale(0, RoundingMode.HALF_UP); ????????} ????????return result.setScale(1, RoundingMode.HALF_UP); ????} ????/** ?????* 梯度 0失望 1不滿意 2一般 3滿意 4驚喜 默認返回3滿意 ?????* ?????* @return */ public static int grads(double avgf) { ????????return (avgf <= 1.5) ? 0 ????????????????: (avgf > 1.5 && avgf <= 2.3) ? 1 ????????????????????????: (avgf > 2.3 && avgf <= 3.1) ? 2 ????????????????????????????????: (avgf > 3.1 && avgf <= 4.0) ? 3 ????????????????????????????????????????: (avgf > 4.0 && avgf <= 5.0) ? 4 : 3; ????} ????public static void main(String[] args) { ????????System.out.println(CommentUtils.avgProductScore(5, 3, 4).doubleValue()); ????????System.out.println(CommentUtils.grads(4.5)); ????} }
[/** * Táobǎo shāngpǐn píngjià * * @project icomment * @fileName ProductScore.Java * @Description * @author light-zhang * @date 2018 nián 1 yuè 15 rì xiàwǔ 4:44:40 * @Version 1.0.0 */ Public abstract class CommentUtils implements Serializable { private static final long serialVersionUID = 8143504152635422263L; private static final double BABY_MAKE_UP = 0.837;// Bǎobèi píngjià jìsuàn zhàn bǐ (0.837/Qiān) private static final double SELLER_MAKE_UP = 0.113;// Màijiā tàidù jìsuàn zhàn bǐ (0.113/Qiān) private static final double LOGISTICS_MAKE_UP = 0.0278;// Wùliú píngjià jìsuàn zhàn bǐ (0.0278/Wàn) private static final double PLATFROM_CASHA = 0.0037;// Píngtái yǐngxiǎng fēn A(0.0037/Wàn) private static final double PLATFROM_CASHB = 0.0185; // Píngtái yǐngxiǎng fēn B (0.0185/Wàn) private static final double PLATFROM_BASIC = 4.7463;// Zuìgāo fēn/** * píngjià fēn jìsuàn gōngshì bǎobèi píngjià 0.837(Qiānfēnbǐ) 5 màijiā tàidù 0.113(Qiānfēnbǐ) 4 wùliú fúwù 0.0278(Wànfēn bǐ) 3 píngtái yǐngxiǎng * 0.0037(Wànfēn bǐ) 2 píngtái yǐngxiǎng 0.0185(Wànfēn bǐ) 1 * * @param babyMark bǎobèi miáoshù * @param sellerMark shāngjiā tàidù * @param logisticsMark wùliú fúwù * @return 5 fēn ×0.837+4 Fēn ×0.113+3 Fēn ×0.0278+2 Fēn ×0.0037+1 Fēn ×0.0185 =4.7463 */ Public static BigDecimal avgProductScore(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); final BigDecimal result = new BigDecimal(value); if (result.DoubleValue() == PLATFROM_BASIC) {// zuìgāo fēn return result.SetScale(0, RoundingMode.HALF_UP); } return result.SetScale(1, RoundingMode.HALF_UP); } /** * tīdù 0 shīwàng 1 bù mǎnyì 2 yībān 3 mǎnyì 4 jīngxǐ mòrèn fǎnhuí 3 mǎnyì * * @return*/ public static int grads(double avgf) { return (avgf <= 1.5)? 0 : (Avgf > 1.5&& Avgf <= 2.3)? 1 : (Avgf > 2.3&& Avgf <= 3.1)? 2 : (Avgf > 3.1&& Avgf <= 4.0)? 3 : (Avgf > 4.0&& Avgf <= 5.0)? 4: 3; } Public static void main(String[] args) { System.Out.Println(CommentUtils.AvgProductScore(5, 3, 4).DoubleValue()); System.Out.Println(CommentUtils.Grads(4.5)); } }]
/**
?* Taobao product evaluation
?*
?* @project icomment
?* @fileName ProductScore.java
?* @Description
?* @author light-zhang
?* @date January 15, 2018, 4:44:40 PM
?* @version 1.0.0
?*/ public abstract class CommentUtils implements Serializable {

????Private static final long serialVersionUID = 8143504152635422263L;

????Private static final double BABY_MAKE_UP = 0.837;// Baby evaluation calculation ratio (0.837/th) private static final double SELLER_MAKE_UP = 0.113;// Seller attitude calculation ratio (0.113/th) private static final double LOGISTICS_MAKE_UP = 0.0278;// Logistics evaluation calculation ratio (0.0278/Million) private static final double PLATFROM_CASHA = 0.0037;// Platform impact points A (0.0037/Million) private static final double PLATFROM_CASHB = 0.0185; // Platform impact points B (0.0185/Million) private static Final double PLATFROM_BASIC = 4.7463;// highest score /**
?????* Evaluation score calculation formula Baby evaluation 0.837 (thousands ratio) 5 Seller attitude 0.113 (thousands ratio) 4 Logistics service 0.0278 (10,000 ratio) 3 Platform impact
?????* 0.0037 (parts ratio) 2 Platform impact 0.0185 (10,000 ratio) 1
?????*
?????* @param babyMark baby description
?????* @param sellerMark Business attitude
?????* @param logisticsMark Logistics Services
?????* @return 5 points × 0.837 + 4 points × 0.113 + 3 points × 0.0278 + 2 points × 0.0037 + 1 points × 0.015 = 4.7463
?????*/ public static BigDecimal avgProductScore(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);
????????Final BigDecimal result = new BigDecimal(value);
????????If (result.doubleValue() == PLATFROM_BASIC) {// highest score return result.setScale(0, RoundingMode.HALF_UP);
????????}
????????Return result.setScale(1, RoundingMode.HALF_UP);
????}

????/**
?????* Gradient 0 Disappointment 1 Dissatisfied 2 General 3 Satisfied 4 Surprise Default 3 Satisfied
?????*
?????* @return */ public static int grads(double avgf) {
????????Return (avgf <= 1.5) ? 0
????????????????: (avgf > 1.5 && avgf <= 2.3) ? 1
????????????????????????: (avgf > 2.3 && avgf <= 3.1) ? 2
????????????????????????????????: (avgf > 3.1 && avgf <= 4.0) ? 3
????????????????????????????????????????: (avgf > 4.0 && avgf <= 5.0) ? 4 : 3;
????}

????Public static void main(String[] args) {
????????System.out.println(CommentUtils.avgProductScore(5, 3, 4).doubleValue());
????????System.out.println(CommentUtils.grads(4.5));
????}
}

轉載于:https://www.cnblogs.com/light-zhang/p/8349576.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/278536.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/278536.shtml
英文地址,請注明出處:http://en.pswp.cn/news/278536.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

rainmeter使用教程_如何使用Rainmeter在桌面上顯示報價

rainmeter使用教程I’ve never really been a desktop gadgets and widgets type of person, but I often put an inspirational quote on my desktop wallpaper. Today we’ll show you how to do this using Rainmeter, no matter what wallpaper you switch to. 我從來沒有真…

Some code changes cannot be hot swapped into a running virtual machine

java運行中修改代碼不能改變立刻應用到本次運行中轉載于:https://www.cnblogs.com/Pusteblume/p/10211110.html

自定義v-drag指令(橫向拖拽滾動)

指令 Vue.directive(drag, {// 鉤子函數&#xff0c;被綁定元素插入父節點時調用 (父節點存在即可調用&#xff0c;不必存在于 document 中)。inserted: (el, binding, vnode, oldVnode) > {console.log(el, binding, vnode, oldVnode)let drag el; // 要拖拽的元素// let …

javascript獲取時間差

function GetDateDiff(startTime, endTime, diffType) {//將xxxx-xx-xx的時間格式&#xff0c;轉換為 xxxx/xx/xx的格式 startTime startTime.replace(/\-/g, "/");endTime endTime.replace(/\-/g, "/");//將計算間隔類性字符轉換為小寫diffType diffTy…

JMeter擴展JMeter插件獲取更多監聽器

為了獲取更多監聽器&#xff0c;方便的監控系統及應用&#xff0c;有必要安裝第三方插件 插件下載地址&#xff1a; https://jmeter-plugins.org/downloads/old/ http://pan.baidu.com/s/1gfC11yN 注&#xff1a;如果插件和軟件版本不兼容&#xff0c;可能在開啟Jmeter時會報錯…

如何阻止Chrome(或Edge)接管媒體密鑰

Google Chrome now has built-in support for media keys. Unfortunately, Chrome will take over your media keys and prevent them from controlling apps like Spotify when you’re watching YouTube, for example. Here’s how to make Chrome ignore your media keys. G…

js滾動條滾動到指定元素

let item document.getElementById("item"); // 指定的元素 let wrapper document.getElementById("wrapper"); // 其父元素 - 必須是產生滾動條的元素// 元素聚焦法定位 // item.focus(); // 可用 outline:none; 除去聚焦產生的框; 對于默認沒有聚焦的…

開源性能測試工具JMeter快速入門(一)

目錄一、JMeter簡介二、JMeter功能介紹三、JMeter腳本四、關于JMeter小提示一、JMeter簡介1.定義JMeter是Apache組織開發的基于Java的壓力測試工具。用于對軟件做壓力測試&#xff0c;它最初被設計用于Web應用測試&#xff0c;但后來擴展到其他測試領域。 1&#xff09;它可以用…

八重州8900如何解鎖_八重貴族怪胎之路

八重州8900如何解鎖Dealing with computers day in and day out can be a harrowing experience. In difficult times, or even when things are idle, finding some spirituality can help cope with the experience—Techies: I give you the Eightfold Noble Geek Path. 日…

mysql 5.7.18 winx64安裝配置方法

在mysql-5.7.18-winx64文件夾下新建my.ini文件[mysql] # 設置mysql客戶端默認字符集 default-character-setutf8 [mysqld] #設置3306端口 port 3306 # 設置mysql的安裝目錄 basedirD:\Program Files\mysql-5.7.18-winx64 # 設置mysql數據庫的數據的存放目錄 datadirD:\Prog…

js 實現拖拽滾動、滾輪縮放元素函數和案例

文章目錄一、拖拽滾動1、封裝函數2、示例&#xff1a;二、滾輪縮放1、封裝函數2、結合拖拽滾動示例一、拖拽滾動 1、封裝函數 /*** description 使用鼠標拖拽div&#xff0c;實現橫向、縱向滾動* param el 被拖拽滾動的元素&#xff08;產生滾動條的元素&#xff09;*/functio…

怎么解決input中readonly屬性的iOS一直存在光標問題

用css中的pointer-events:none轉載于:https://www.cnblogs.com/studyh5/p/8352061.html

贈與大學畢業生_出售,贈與或交易iPhone之前應該做什么

贈與大學畢業生A factory reset of your iPhone erases all of your content and settings, reverting it to a like-new state. However, there are a few extra steps you should take if you plan to get rid of your iPhone. iPhone的恢復出廠設置將刪除所有內容和設置&…

layui radio 根據獲取的到值選中

<input type"radio" name"lwkg" value"1" title"開" lay-filter"lwkg"> <input type"radio" name"lwkg" value"0" title"關" lay-filter"lwkg"> layui.use(…

設置Mac自動顯示和隱藏 Dock 欄的速度

Dock 顯示和隱藏&#xff0c;系統默認設置成了1秒 通過終端.APP修改顯示和隱藏的時間 &#xff08;單位&#xff1a;秒&#xff09; 默認的&#xff1a;defaults write com.apple.dock autohide-delay -int 1 優化的&#xff1a;defaults write com.apple.dock autohide-del…

powerpoint預覽_如何放大和縮小PowerPoint演示文稿的一部分

powerpoint預覽Microsoft PowerPoint lets you zoom in and out on a specific part of your PowerPoint slideshow, which can be handy both while editing and for drawing attention to important objects or ideas during the presentation. Here’s how to do it. Micros…

GitGitHub語法大全

目錄 1. GitHub與Git萬用語法1&#xff09;創建庫2&#xff09;添加和提交到倉庫3&#xff09;版本回退4&#xff09;緩存區和暫存區5&#xff09;撤銷和刪除文件6)遠程倉庫7)創建和合并分支2. 更多Git語法1. GitHub與Git萬用語法 1&#xff09;創建庫 git init 2&#xff09;添…

從Firefox控制您喜歡的音樂播放器

Do you love listening to music while you browse? Now you can access and control your favorite music player directly from Firefox with the FoxyTunes extension. 您喜歡在瀏覽時聽音樂嗎&#xff1f; 現在&#xff0c;您可以直接使用FoxyTunes擴展程序從Firefox訪問和…

富文本編輯器初探

長期以來&#xff0c;作為用戶我是富文本編輯器的使用者&#xff0c;作為前端開發&#xff0c;我也只是富文本插件的使用者&#xff0c;對內部實現細節不甚了解&#xff0c;使用上也只停留在調用插件提供的API&#xff0c;實現一些業務邏輯。最近的項目&#xff0c;需要開發一個…

特殊的求和(函數和循環)

【問題描述】 編寫函數int fun(int a,int n)求Sn a aa aaa … aa…a 的值&#xff08;最后一個數中 a 的個數為 n &#xff09;&#xff0c;其中 a 是一個1~9的數字&#xff0c;例如&#xff1a;2 22 222 2222 22222 &#xff08;此時 a2 n5 &#xff09; 。參數由主函…