版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、決策樹(shù)程序?qū)嶒?yàn)眾所周知,數(shù)據(jù)庫(kù)技術(shù)從20世紀(jì)80年代開(kāi)始,已經(jīng)得到廣泛的普及和應(yīng)用。 隨著數(shù)據(jù)庫(kù)容量的膨脹,特別是數(shù)據(jù)倉(cāng)庫(kù)以及web等新型數(shù)據(jù)源的日益普及,人 們面臨的主要問(wèn)題不再是缺乏足夠的信息可以使用, 而是面對(duì)浩瀚的數(shù)據(jù)海洋如 何有效地利用這些數(shù)據(jù)。從數(shù)據(jù)中生成分類器的一個(gè)特別有效的方法是生成一個(gè)決策樹(shù)(DecisionTree)。決策樹(shù)表示方法是應(yīng)用最廣泛的邏輯方法之一,它從一組無(wú)次序、無(wú)規(guī) 則的事例中推理出決策樹(shù)表示形式的分類規(guī)則。決策樹(shù)分類方法采用自頂向下的遞歸方式,在決策樹(shù)的內(nèi)部結(jié)點(diǎn)進(jìn)行屬性值的比較并根據(jù)不同的屬性值判斷從該 結(jié)點(diǎn)向下的分支,在決策樹(shù)的葉結(jié)點(diǎn)得到結(jié)論。所以從決策樹(shù)
2、的根到葉結(jié)點(diǎn)的一 條路徑就對(duì)應(yīng)著一條合取規(guī)則,整棵決策樹(shù)就對(duì)應(yīng)著一組析取表達(dá)式規(guī)則。決策樹(shù)是應(yīng)用非常廣泛的分類方法,目前有多種決策樹(shù)方法,如ID3、CN2SLIQ、SPRINT.一、問(wèn)題描述1.1 相關(guān)信息決策樹(shù)是一個(gè)類似于流程圖的樹(shù)結(jié)構(gòu),其中每個(gè)內(nèi)部結(jié)點(diǎn)表示在一個(gè)屬性上 的測(cè)試,每個(gè)分支代表一個(gè)測(cè)試輸入,而每個(gè)樹(shù)葉結(jié)點(diǎn)代表類或類分布。 數(shù)的最 頂層結(jié)點(diǎn)是根結(jié)點(diǎn)。一棵典型的決策樹(shù)如圖1所示。它表示概念buys_computer, 它預(yù)測(cè)顧客是否可能購(gòu)買計(jì)算機(jī).內(nèi)部結(jié)點(diǎn)用矩形表示,而樹(shù)葉結(jié)點(diǎn)用麻圓表示。 為了對(duì)未知的樣本分類,樣本的屬性值在決策樹(shù)上測(cè)試。決策樹(shù)從根到葉結(jié)點(diǎn)的 決策樹(shù)中每一個(gè)非葉結(jié)
3、點(diǎn)對(duì)應(yīng)著一個(gè)非類別屬性,樹(shù)枝代表這個(gè)屬性的 值。一個(gè)葉結(jié)點(diǎn)代表從樹(shù)根到葉結(jié)點(diǎn)之間的路徑對(duì)應(yīng)的記錄所屬的類別屬性 值。 每一個(gè)非葉結(jié)點(diǎn)都將與屬性中具有最大信息量的非類別屬性相關(guān)聯(lián)。 采用信息增益來(lái)選擇能夠最好地將樣本分類的屬性。信息增益基于信息論中嫡的概念.ID3總是選擇具有最高信息增益(或最大嫡 壓縮)的屬性作為當(dāng)前結(jié)點(diǎn)的測(cè)試屬性.該屬性使得對(duì)結(jié)果劃分中的樣本分類所 需的信息量最小,并反映劃分的最小隨機(jī)性或“不純性”。1.2 問(wèn)題重述1、目標(biāo)概念為“壽險(xiǎn)促銷”2、計(jì)算每個(gè)屬性的信息增益3、確定根節(jié)點(diǎn)的測(cè)試屬性數(shù)據(jù)收入范IH險(xiǎn)促倘任川片保險(xiǎn)1性別W如一50K看古45-3O-4OK是古*404。T
4、OKt i宵方4230-40K是/外代5O-6OK14 蛆有382O-3OK否怨女553O-4OK足兄152O-3UK有勢(shì)21I3O-4OK否否女5O-4OK是杏k41'4O-5OKH 心有43122T0K是哲女2950 - 60K是杏女4(1-50K杏古力55 2O-3OK是是女J9模型求解構(gòu)造決策樹(shù)的方法是采用自上而下的遞歸構(gòu)造,其思路是: 以代表訓(xùn)練樣本的單個(gè)結(jié)點(diǎn)開(kāi)始建樹(shù)(步驟 1)。 如果樣本都在同一類,則該結(jié)點(diǎn)成為樹(shù)葉,并用該類標(biāo)記(步驟 2和3)。 否則,算法使用稱為信息增益的機(jī)遇嫡的度量為啟發(fā)信息,選擇能最好地將 樣本分類的屬性(步驟6).該屬性成為該結(jié)點(diǎn)的“測(cè)試”或“判
5、定”屬性(步 驟7)。值得注意的是,在這類算法中,所有的屬性都是分類的,即取離散值的 連續(xù)值的屬性必須離散化。 對(duì)測(cè)試屬性的每個(gè)已知的值,創(chuàng)建一個(gè)分支,并據(jù)此劃分樣本(步驟810) 算法使用同樣的過(guò)程,遞歸地形成每個(gè)劃分上的樣本決策樹(shù)。一旦一個(gè)屬性 出現(xiàn)在一個(gè)結(jié)點(diǎn)上,就不必考慮該結(jié)點(diǎn)的任何后代(步驟13)。遞歸劃分步驟,當(dāng)下列條件之一成立時(shí)停止:(a)給定結(jié)點(diǎn)的所有樣本屬于同一類(步驟2和3)。(b)沒(méi)有剩余屬性可以用來(lái)進(jìn)一步劃分樣本(步驟4).在此情況下,采用多數(shù)表 決(步驟5) o這涉及將給定的結(jié)點(diǎn)轉(zhuǎn)換成樹(shù)葉,并用 samples中的多數(shù)所在類 別標(biāo)記它。換一種方式,可以存放結(jié)點(diǎn)樣本的類分
6、布。(c)分支test_attribute=a沒(méi)有樣本。在這種情況下,以samples中的多數(shù)類創(chuàng)建 一個(gè)樹(shù)葉(步驟12) 0算法 Decision_Tree(samples,attribute_list)輸入由離散值屬性描述的訓(xùn)練樣本集samples;候選屬性集合attribute_list.輸出一棵決策樹(shù)。(1 )創(chuàng)建節(jié)點(diǎn)N;(2) If samples 都在同一類 C 中 then(3) 返回N作為葉節(jié)點(diǎn),以類C標(biāo)記;(4) If attribute_list 為空 then(5) 返0 N作為葉節(jié)點(diǎn),以samples中最普遍的類標(biāo)記;多數(shù)表決(6) 選擇attribute_list中具
7、有最高信息增益的屬性 test_attribute ;(7)以 test_attribute 標(biāo)記節(jié)點(diǎn) N;(8) For each test_attribute 的已知值 v /戈U分 samples(9) 由節(jié)點(diǎn)N分出一個(gè)對(duì)應(yīng)test_attribute=v的分支;(10) 令Sv為samples中test_attribute=v的樣本集合;一個(gè)劃分塊(11) If Sv 為空 then(12) 加上一個(gè)葉節(jié)點(diǎn),以samples中最普遍的類標(biāo)記;(13) Else加入一個(gè)由 Decision_Tree(Sv ,attribute_list test_attribute) 返回節(jié)點(diǎn)值E (S
8、)= (915) log2 (915)-(615)log2 (615) =0.971Values (收入范圍)=2030K, 3040k, 4050K,50-60KE(S(20-30K)= (-24)log2 (24) - (24)log2(24)=1E (S(30-40K) = (-45)log2(45)-(15) log2(15)=0。7219E(S(40-50K) )= ( 14)log2(14)-(34)log2 (34) =0.8113E (S(5060K) )= (22)log2 (22) (02) log2(02)=0所以E(S,收入范圍)=(4/15) E (S(20-30K)
9、 + (5/15) E (S(3040K) +(4/15)E (S(40- 50K) +(2/15) E (S(50-60K)=0。7236Gain (S,收入范圍)=0。971-0。7236=0.2474同理:計(jì)算“保險(xiǎn)”,"性別”,“年齡”的信息增益為:E (S)= (915) log2 (915)-(615)log2 (615) =0。971Insurance (保險(xiǎn))=yes, noE(S (yeS) ) = (-33)log2 (33)-(03)log2(03)=0E (S(no) ) = (-612) log2 (612) - (612)log2 (612) =1E (S
10、, 保險(xiǎn))=(3/15) E (S(yeS )+ (12/15) E(S(no) ) =0.8Gain(S,保險(xiǎn))=0。9710。8=0.171E(S) = (-915)log2 (915) (615)log2 (615) =0。971 sex (性另U )=male, femaleE(S(male) = (37)log2 (37) (47) log2 (47)=0。9852 E(S (female)尸(一68)log2 (68)- (28) 10g2(28)=0。8113E (S, 性別)=(7/15) E (S (male) ) +(8/15) E (S(female) =0。8925 G
11、ain (S,性另U)=0。971-0.8925=0。0785E(S)= (-915)log2 (915)- (615) 10g2(615)=0。971age (年齡)=1540, 41 60E (S (1540) )= (-67) log2 (67) (17)log2(17) =0。5917 E(S(41 60) ) = (-38) log2 (38) (58) 10g2(58)=0。9544 E(S, 年齡)=(7/15) E(S(1540) ) +(8/15) E(S (41 60) ) =0.7851 Gain(S,年齡)=0.9710。7851=0.1859代碼package Dec
12、isionTree;import java.util 。 ArrayList ;/* *決策樹(shù)結(jié)點(diǎn)類 /public class TreeNode private String name ; 節(jié)點(diǎn)名(分裂屬性的名稱 )private ArrayList < String > rule; 結(jié)點(diǎn)的分裂規(guī)則ArrayListTreeNodechild; / 子結(jié)點(diǎn)集合private ArrayList ArrayList<String>> datas ; /劃分到該結(jié)點(diǎn)的訓(xùn)練元組private ArrayList<String> candAttr ; 劃分到
13、該結(jié)點(diǎn)的候選屬性public TreeNode() =""; this.rule = new ArrayList String>(); this。child = new ArrayList<TreeNode > (); this.datas = null;this。candAttr = null ;public ArrayList TreeNode> getChild() return child;public void setChild(ArrayList TreeNode child)this.child = child ;p
14、ublic ArrayList String> getRule( ) return rule;public void setRule (ArrayList<String > rule) thiso rule = rule;public String getName()return name;public void setName(String name) = name;public ArrayList < ArrayList < String > > getDatas ()return datas;public void setDat
15、as (ArrayList ArrayList<String > > datas) thiso datas = datas;public ArrayList < String > getCandAttr () return candAttr;public void setCandAttr(ArrayList String> candAttr) thiso candAttr = candAttr ;package DecisionTree;import java。io。BufferedReader;import java.io.IOException ;imp
16、ort java。io。InputStreamReader;import java。 util.ArrayList ;import java.util 。 StringTokenizer;/* *決策樹(shù)算法測(cè)試類* /public class TestDecisionTree /* * 讀取候選屬性* return候選屬性集合* throws IOException/public ArrayList<String > readCandAttr() throws IOExceptionArrayList<String > candAttr = new ArrayList
17、String > ();BufferedReader reader = new BufferedReader(new InputStreamReader(System。in);String str =while (! (str = reader o readLine()。equals。' ")StringTokenizer tokenizer = new StringTokenizer(str);while (tokenizer。hasMoreTokens () ) candAttr.add (tokenizer。 nextToken();return candAttr
18、;/*讀取訓(xùn)練元組return訓(xùn)練元組集合 throws lOException*/public ArrayList<ArrayList<String > >readData()throws lOException ArrayList<ArrayList<String > > datas = new ArrayList ArrayList<String>>(); BufferedReader reader = new BufferedReader (new InputStreamReader(System。in); String
19、 str =""while (! (str = reader.readLine() ) .equals。' ) ) StringTokenizer tokenizer = new StringTokenizer(str);ArrayList String> s = new ArrayList<String > (); while (tokenizer。hasMoreTokens () s。add(tokenizer。nextToken (); ) datas.add(s);return datas;/* *遞歸打印樹(shù)結(jié)構(gòu)* param root當(dāng)前
20、待輸出信息的結(jié)點(diǎn)*/public void printTree ( TreeNode root) Systemo out.println( " name:" + root.ge(l)a me ArrayList <String > rules = root。getRule();Systemo out。print ("node rules: ");for (int i = 0; i < rules.size( ) ; i+) Systemo out.print (rules。get(i)+ "");Systemo ou
21、t。print ("");Systemo out.println ("");ArrayList<TreeNode> children = root 。getChild ();int size =children。size();if (size = 0)Systemo out。println( ” 今-leaf node!<-"); else Systemo out.println("size of children: s-izehQdre)nfor (int i = 0 ; i < children。 size
22、(); i+ )Systemo out.print (" child " + (i + 1) + " of node 。 getNam+(i)oot+ ");printTree (children o get(i);/*主函數(shù),程序入口* param args*/public static void main (String口 args)TestDecisionTree tdt = new TestDecisionTree );ArrayList<String> candAttr = null ;ArrayList ArrayList<
23、String>> datas = null;try System.out.println("請(qǐng)輸入候選屬性”);candAttr = tdt。 readCandAttr();System.out.println ("請(qǐng)輸入訓(xùn)練數(shù)據(jù)"); datas = tdt.readData (); catch (IOException e) e。printStackTrace();DecisionTree tree = new DecisionTree ();TreeNode root = tree.buildTree(datas , candAttr); tdt
24、o printTree (root); package DecisionTree;import java.util.ArrayList ;import java。 util.HashMap;import java.util 。 Iterator;import java.util.Map;/*選擇最佳分裂屬性* /public class Gain private ArrayList ArrayList<String > > D = null;訓(xùn)練元組private ArrayList String > attrList = null; / 候選屬性集public Gai
25、n(ArrayList ArrayList<String > > datas, ArrayList StringattrList) this.D = datas;this。attrList = attrList ;/*女* 獲取最佳侯選屬性列上的值域(假定所有屬性列上的值都是有限的名詞或分類類型 的)* param attrIndex指定的屬性列的索引* return值域集合* /public ArrayList<String > getValues (ArrayList < ArrayList < String > > datas, in
26、t attrIndex)ArrayList Stringvalues = new ArrayList<String>( );String r ="for (int i = 0; i < datas.size( ) ;i+) r = datas。get (i) 。 get(attrlndex);if (lvalues。 contains (r) )values。add (r);)return values;)/* *獲取指定數(shù)據(jù)集中指定屬性列索引的域值及其計(jì)數(shù)* param d指定的數(shù)據(jù)集* param attrIndex 指定的屬性列索引* return類別及其計(jì)數(shù)
27、的 map* /public Map < String, lnteger> valueCounts(ArrayList ArrayList<String > > datas, int attrIndex)Map <String , lnteger> valueCount = new HashMap <String, Integer > );String c =;ArrayList < String > tuple = null ;for (int i = 0 ; i datas.size() ;i+) tuple = datas
28、.get(i);c = tuple。 get (attrIndex);if (valueCount 。 containsKey(c) )valueCount.put(c, valueCount。 get(c) + 1); else valueCounto put ( c, 1);return valueCount;)/* * 求對(duì)datas中元組分類所需的期望信息,即 datas的嫡* param datas訓(xùn)練元組* return datas 的嫡值* /public double infoD (ArrayList <ArrayList Stringdatas) double info
29、 = 0.000;int total = datas。 size();Map <String , Integer> classes = valueCounts (datas, attrList.size();Iterator iter = classes.entrySet ) ).iterator );Integer counts = new Integer classes size ();for(int i = 0; iter 。 hasNext (); i+ )Map.Entry entry =( Map.Entry) iter.next();Integer val = (In
30、teger) entry.getValue();countsi = val;)for (int i = 0; i countso length ; i+) double base = DecimalCalculate.div (counts i, total, 3);info +=(-1) * base * Math。log(base);return info ;/* 獲取指定屬性列上指定值域的所有元組* param attrIndex指定屬性列索引* param value指定屬性列的值域* return指定屬性列上指定值域的所有元組*/public ArrayList<ArrayLi
31、st < String > > datasOfValue(int attrIndex , String value) ArrayList<ArrayList<String > > Di = new ArrayList<ArrayList<String > > (); ArrayList < String > t = null;for (int i = 0; i D.size() ; i+) t = D。get ;if (to get(attrIndex)。 equals (value) Di。 add (t);)re
32、turn Di;/* * 基于按指定屬性劃分對(duì)D的元組分類所需要的期望信息* param attrIndex 指定屬性的索引* ©return按指定屬性劃分的期望信息值* /public double infoAttr (int attrIndex) double info = 0.000 ;ArrayList <String > values = getValues (D, attrIndex);for (int i = 0; i < values 。 size () ;i+)ArrayList<ArrayList<String> > dv
33、 = datasOfValue (attrIndex, values.get(i); info += DecimalCalculate.mul(DecimalCalculate 。 div (dv。size ), D。size () 3) , infoD (dv);return info;/* * 獲取最佳分裂屬性的索引* return最佳分裂屬性的索引/public int bestGainAttrIndex () int index = 1;double gain = 0。000;double tempGain = 0.000 ;for (int i = 0; i attrList.siz
34、e (); i+)tempGain = infoD (D) infoAttr(i); if t tempGain > gain) gain = tempGain ;index = i;return index;package DecisionTree;import java.util 。 ArrayList;import java。 util.HashMap;import java。 util.Iterator ;import java.util.Map;import javax 。 smartcardio 。 */*決策樹(shù)構(gòu)造類/public class DecisionTree 2表
35、不private Integer attrSelMode;最佳分裂屬性選擇模式,1表示以信息增益度量,以信息增益率度量。暫未實(shí)現(xiàn)2public DecisionTree () this。attrSelMode = 1;public DecisionTree (int attrSelMode) this。attrSelMode = attrSelMode ;public void setAttrSelMode (Integer attrSelMode) this。attrSelMode = attrSelMode;/* *獲取指定數(shù)據(jù)集中的類別及其計(jì)數(shù) param datas指定的數(shù)據(jù)集*/pu
36、blic Map<String , Map<String , String c = "return類別及其計(jì)數(shù)的 mapInteger> classOfDatas(ArrayList ArrayList<String>> datasInteger> classes = new HashMap<String , Integer>();ArrayList<String > tuple = null;for (int i = 0 ; i < datas.size () ; i+) tuple = datas。get(i
37、);c = tuple.get (tuple。 size () 1);if (classes。 containsKey(c) ) classes, put (c, classes.get(c) + 1); else classes.put (c,1);return classes;/* *獲取具有最大計(jì)數(shù)的類名,即求多數(shù)類 param classes 類的鍵值集合return多數(shù)類的類名/public String maxClass(Map<String ) Integer> classes) String maxC =" int max = -1 ;Iterator i
38、ter = classes.entrySet () .iterator (); for (int i = 0; iter。hasNext () ; i+) Map.Entry entry = (Map.Entry ) iter。next();String key = (String)entry 。 getKey ();Integer val =(Integer) entry.getValue ();if (val > max) max = val;maxC = key;)return maxC;/*構(gòu)造決策樹(shù) param datas訓(xùn)練元組集合 param attrList候選屬性集合r
39、eturn決策樹(shù)根結(jié)點(diǎn)*/public TreeNode buildTree(ArrayList<ArrayList<String > > datas, ArrayList<String > attrList) /System.outo print ("候選屬性列表: ");/for (int i = 0; i < attrList 。 size (); i+ )/Systemo out.print(" " + tattigst (i) +”");/System.out.println ();TreeN
40、ode node = new TreeNode();node.setDatas (datas);node.setCandAttr (attrList);Map<String , Integer> classes = classOfDatas(datas);String maxC = maxClass(classes);if (classes.size() = 1 | | attrList。 size() = 0) node。setName (maxC);return node;Gain gain = new Gain(datas, attrList);int bestAttrInd
41、ex = gain.bestGainAttrIndex ();ArrayList<String > rules = gain.getValues (datas, bestAttrIndex);node。setRule(rules);node.setName(attrList。 get (bestAttrIndex);if(rules.size ()2) /?此處有待商榷attrList。 remove(bestAttrIndex );for (int i = 0 ; i < rules。 size () ;i+) String rule = rules.get(i );Arr
42、ayList ArrayList<String > > di = gain.datasOfValue ( bestAttrIndex, rule); for (int j = 0; j < di.size () ; j+) di.get(j) .remove(bestAttrIndex );if ( di。size ) = 0) TreeNode leafNode = new TreeNode ();leafNode。setName (maxC);leafNode.setDatas(di);leafNode.setCandAttr ( attrList); node。g
43、etChild ()。add(leafNode); else TreeNode newNode = buildTree (di, attrList); node。getChild () .add (newNode);) return node;)package DecisionTree;import java.math。 BigDecimal;public class DecimalCalculate /*女*由于Java的簡(jiǎn)單類型不能夠精確的對(duì)浮點(diǎn)數(shù)進(jìn)行運(yùn)算,這個(gè)工具類提供精*確的浮點(diǎn)數(shù)運(yùn)算,包括加減乘除和四舍五入。*/默認(rèn)除法運(yùn)算精度private static final int DEF
44、_DIV_SCALE = 10;這個(gè)類不能實(shí)例化private DecimalCalculate () )/* * 提供精確的加法運(yùn)算。* param v1被加數(shù)* param v2 加數(shù)* return兩個(gè)參數(shù)的和* /public static double add(double v1 , double v2) BigDecimal bl = new BigDecimal( Double。 toString(v1 );BigDecimal b2 = new BigDecimal( Double。 toString(v2);return b1。add(b2) .doubleValue();/
45、* * 提供精確的減法運(yùn)算。* param v1被減數(shù)* param v2 減數(shù)* return兩個(gè)參數(shù)的差* /public static double sub(double v1 , double v2) BigDecimal b1 = new BigDecimal ( Double.toString(v1 );BigDecimal b2 = new BigDecimal ( Double.toString(v2);/*return b1。 subtract(b2)。 doubleValue();提供精確的乘法運(yùn)算。 param v1被乘數(shù)* param v2 乘數(shù)* return兩個(gè)參數(shù)
46、的積* /public static double mul (double v1 , double v2) BigDecimal b1 = new BigDecimal(Double。toString (v1);BigDecimal b2 = new BigDecimal( Double.toString(v2 );return b1。multiply ( b2).doubleValue ();/* * 提供(相對(duì))精確的除法運(yùn)算,當(dāng)發(fā)生除不盡的情況時(shí),精確到* 小數(shù)點(diǎn)以后10位,以后的數(shù)字四舍五入.* param v1被除數(shù)* param v2 除數(shù)* return兩個(gè)參數(shù)的商* /publ
47、ic static double div (double v1, double v2 ) return div (v1,v2,DEF_DIV_SCALE);/* *提供(相對(duì))精確的除法運(yùn)算。當(dāng)發(fā)生除不盡的情況時(shí),由scale參數(shù)指* 定精度,以后的數(shù)字四舍五入。* param v1被除數(shù)* param v2 除數(shù)* param scale表示表示需要精確到小數(shù)點(diǎn)以后幾位* return兩個(gè)參數(shù)的商* /public static double div(double v1 , double v2,int scale) if (scale<0) throw new IllegalArgum
48、entException (“The scale must be a positive integer or zero"BigDecimal b1 = new BigDecimal ( Double。 toString(v1);BigDecimal b2 = new BigDecimal(Double 。 toString(v2);return b1。divide(b2,scale,BigDecimal.ROUND_HALF_UP ) .doubleValue();/* * 提供精確的小數(shù)位四舍五入處理.* param v需要四舍五入的數(shù)字* param scale小數(shù)點(diǎn)后保留幾位*
49、 return四舍五入后的結(jié)果*/public static double round(double v , int scale) if(scale<0) throw new IllegalArgumentException (“The scale must be a positive integer or zero"BigDecimal b = new BigDecimal (Double o toString(v );BigDecimal one = new BigDecimal( ; " 1")return b.divide (one,scale, B
50、igDecimal。ROUND_HALF_UP).doubleValue(); /* * 提供精確的類型轉(zhuǎn)換(Float)* param v需要被轉(zhuǎn)換的數(shù)字* return返回轉(zhuǎn)換結(jié)果* /public static float convertsToFloat(double v ) BigDecimal b = new BigDecimal(v);return b。floatValue ();/* *提供精確的類型轉(zhuǎn)換(Int)不進(jìn)行四舍五入* param v需要被轉(zhuǎn)換的數(shù)字* return返回轉(zhuǎn)換結(jié)果*/public static int convertsToInt(double v ) B
51、igDecimal b = new BigDecimal (v);return Value();/* * 提供精確的類型轉(zhuǎn)換(Long)* param v需要被轉(zhuǎn)換的數(shù)字* return返回轉(zhuǎn)換結(jié)果*/public static long convertsToLong(double v ) BigDecimal b = new BigDecimal (v);return b.longValue();/* *返回兩個(gè)數(shù)中大的一個(gè)值* param v1需要被對(duì)比的第一個(gè)數(shù)* param v2需要被對(duì)比的第二個(gè)數(shù)* return返回兩個(gè)數(shù)中大的一個(gè)值* /public static dou
52、ble returnMax(double v1,double v2 ) BigDecimal b1 = new BigDecimal(v1);BigDecimal b2 = new BigDecimal(v2 );return b1.max(b2)。doubleValue ();/* * 返回兩個(gè)數(shù)中小的一個(gè)值* param v1需要被對(duì)比的第一個(gè)數(shù)* param v2需要被對(duì)比的第二個(gè)數(shù)* return返回兩個(gè)數(shù)中小的一個(gè)值* /public static double returnMin ( double v1 , double v2) BigDecimal b1 = new BigDecimal(v1 );BigDecimal b2 = new
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年高校博士研究生教師職務(wù)聘任合同范本3篇
- 二零二五年度跨境電子商務(wù)代理銷售合同6篇
- 二零二五年空壓機(jī)行業(yè)市場(chǎng)推廣與銷售合同3篇
- 二零二五年度儲(chǔ)煤場(chǎng)煤炭?jī)?chǔ)備與智能物流服務(wù)合同3篇
- 2024版土地貸款反擔(dān)保合同范本3篇
- 二零二五年度特殊環(huán)境搬遷及環(huán)保措施合同3篇
- 二零二五版跨境擔(dān)保居間交易合同細(xì)則2篇
- 展會(huì)國(guó)際物流合同(2篇)
- 二零二五版代駕服務(wù)租賃合同范本(含車輛使用限制條款)2篇
- 二零二五版快遞駕駛員職業(yè)發(fā)展規(guī)劃與聘用合同3篇
- 公共政策分析 課件 第8章政策評(píng)估;第9章政策監(jiān)控
- 人教版八年級(jí)上學(xué)期物理期末復(fù)習(xí)(壓軸60題40大考點(diǎn))
- 企業(yè)環(huán)保知識(shí)培訓(xùn)課件
- 2024年度管理評(píng)審報(bào)告
- 暨南大學(xué)《微觀經(jīng)濟(jì)學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 醫(yī)藥銷售合規(guī)培訓(xùn)
- DB51-T 5038-2018 四川省地面工程施工工藝標(biāo)準(zhǔn)
- 三年級(jí)數(shù)學(xué)(上)計(jì)算題專項(xiàng)練習(xí)附答案
- GB/T 12723-2024單位產(chǎn)品能源消耗限額編制通則
- 2024年廣東省深圳市中考英語(yǔ)試題含解析
- GB/T 16288-2024塑料制品的標(biāo)志
評(píng)論
0/150
提交評(píng)論