在報(bào)表的數(shù)據(jù)統(tǒng)計(jì)中,常常會(huì)根據(jù)精度呈現(xiàn)或者單位換算等要求,需要對(duì)數(shù)據(jù)執(zhí)行四舍五入的操作,這種操作稱為舍位處理。簡(jiǎn)單直接的舍位處理有可能會(huì)帶來(lái)隱患,原本平衡的數(shù)據(jù)關(guān)系可能會(huì)被打破。
成都網(wǎng)站建設(shè)、做網(wǎng)站的關(guān)注點(diǎn)不是能為您做些什么網(wǎng)站,而是怎么做網(wǎng)站,有沒(méi)有做好網(wǎng)站,給創(chuàng)新互聯(lián)公司一個(gè)展示的機(jī)會(huì)來(lái)證明自己,這并不會(huì)花費(fèi)您太多時(shí)間,或許會(huì)給您帶來(lái)新的靈感和驚喜。面向用戶友好,注重用戶體驗(yàn),一切以用戶為中心。為了保證報(bào)表中數(shù)據(jù)關(guān)系的正確,就需要調(diào)整舍位之后的數(shù)據(jù),使得數(shù)據(jù)重新變得平衡,這樣的調(diào)整就叫做舍位平衡。在這里我們就討論一下如何利用集算器來(lái)處理舍位平衡問(wèn)題。
舍位處理往往會(huì)采取四舍五入計(jì)算,這時(shí)就會(huì)產(chǎn)生誤差,而如果報(bào)表中有這些數(shù)據(jù)的合計(jì)數(shù)值,那么舍位時(shí)產(chǎn)生的誤差就會(huì)積累,有可能導(dǎo)致舍位過(guò)的數(shù)據(jù)與其合計(jì)值無(wú)法匹配。例如,保留一位小數(shù)的原始的數(shù)據(jù)是4.5+4.5=9.0,而四舍五入只保留整數(shù)部分后,平衡關(guān)系就變?yōu)?+5=9了,看上去明顯是荒謬的。在這樣的情況下,需要在保持合計(jì)值正確的條件下,調(diào)整非合計(jì)數(shù)據(jù)舍位后的結(jié)果,使得數(shù)據(jù)關(guān)系重新平衡,例如調(diào)整為4+5=9。這個(gè)簡(jiǎn)單的例子就是典型舍位平衡。
如果在數(shù)據(jù)統(tǒng)計(jì)時(shí),每個(gè)數(shù)據(jù)只用于一次合計(jì),那么在處理舍位平衡時(shí),只需要根據(jù)合計(jì)值的誤差,調(diào)整使用的各項(xiàng)數(shù)據(jù)就可以了,這屬于比較簡(jiǎn)單的情況。例如:
A | B | C | |
1 | [1.48,0,1.42,0.32,6.48,0.98,1.39] | =A1.sum() | |
2 | =A1.(round(~)) | =round(B1) | =A2.sum() |
A1的序列中存儲(chǔ)了一些數(shù)據(jù),在B1中計(jì)算了它們的合計(jì)值,結(jié)果如下:
現(xiàn)在,將數(shù)據(jù)取整,重新統(tǒng)計(jì)。A2中將序列中每個(gè)數(shù)據(jù)用round函數(shù)四舍五入取整,得到新的序列。在B2中則將B1中的結(jié)果取整,這是數(shù)據(jù)取整后應(yīng)該獲得的結(jié)果。在C2中則只是簡(jiǎn)單地用取整后的數(shù)據(jù)來(lái)求和。A2,B2和C2中結(jié)果分別如下:
顯然,舍位后誤差的累積導(dǎo)致數(shù)據(jù)不再平衡,將原始數(shù)據(jù)分別四舍五入后,總和由12變成了10。那么,能不能把合計(jì)數(shù)直接改為10呢?這是不行的,因?yàn)檫@樣會(huì)使得最終結(jié)果與真實(shí)值完全不符。因此,為了保證舍位后仍然能夠保持平衡關(guān)系,應(yīng)該分別改變各個(gè)原始數(shù)據(jù)舍位后的結(jié)果。
舍位后總計(jì)產(chǎn)生的誤差,稱為“平衡差”,舍位平衡其實(shí)就是消除平衡差的過(guò)程。處理舍位平衡的規(guī)則有很多,下面我們分別進(jìn)行研究:
(1) 將平衡差整理到第一個(gè)數(shù)據(jù)中。即:
A | B | C | |
1 | [1.48,0,1.42,0.32,6.48,0.98,1.39] | =A1.sum() | |
2 | =A1.(round(~)) | >A2(1)+=round(B1)-A2.sum() | =A2.sum() |
B2中,把平衡差折算到舍位后的第一個(gè)數(shù)據(jù)中。整理后,在C2中重新計(jì)算了舍位平衡處理后的合計(jì)值。A2和C2中的結(jié)果如下:
這種舍位平衡的處理規(guī)則最為簡(jiǎn)單。但是,舍位后第1個(gè)數(shù)據(jù)由1.48變?yōu)榱?,明顯偏移了很多,因此這樣的處理不夠合理,特別是在數(shù)據(jù)很多的情況下,平衡差也有可能會(huì)累積的很大,進(jìn)而致使第1個(gè)數(shù)據(jù)產(chǎn)生非?;闹嚨钠平Y(jié)果。
(2) 將平衡差按照“最小調(diào)整值”,對(duì)絕對(duì)值比較大的數(shù)據(jù)進(jìn)行分擔(dān)調(diào)整。
所謂最小調(diào)整值,就是舍位后最小精度的單位值,例如在取整時(shí),最小精度就是個(gè)位,最小調(diào)整值就是1或者-1。如果舍位后合計(jì)值變小,則需要將數(shù)據(jù)調(diào)大,那么最小調(diào)整值就是1;如果舍位后合計(jì)值變大,則需要將數(shù)據(jù)調(diào)小,最小調(diào)整值就是-1。而調(diào)整只針對(duì)絕對(duì)值比較大的數(shù)據(jù),這樣它們的相對(duì)偏差就會(huì)比較小。具體調(diào)整幾個(gè)數(shù),那就是合計(jì)值偏差除以最小調(diào)整值。
在這種規(guī)則下,前面問(wèn)題的舍位平衡處理如下:
A | B | C | |
1 | [1.48,0,1.42,0.32,6.48,0.98,1.39] | =A1.sum() | |
2 | =A1.(round(~)) | =round(B1)-A2.sum() | =sign(B2) |
3 | =A1.psort@z(abs(~)) | >abs(B2).run(A2(A3(#))+=C2) | =A2.sum() |
因?yàn)橹皇侨≌僮?,因此C2中計(jì)算的最小調(diào)整值就是合計(jì)值偏差的正負(fù);
A3中,根據(jù)原始數(shù)據(jù)的絕對(duì)值從大到小做了一個(gè)排序,結(jié)果就是排序后的序號(hào)。
B3是最主要的,因?yàn)橹皇侨≌僮?,所以B2中的偏差絕對(duì)值是多少,就調(diào)整幾個(gè)數(shù)。以此循環(huán),依照原始值的絕對(duì)值大小,依次分配最小調(diào)整值。
C3是對(duì)調(diào)整后的A2重新驗(yàn)證了合計(jì)值。
調(diào)整后,A2和C3中的結(jié)果如下:
在這種方案中,平衡差由多個(gè)數(shù)據(jù)分擔(dān),而選擇絕對(duì)值大的數(shù)據(jù)會(huì)使得數(shù)據(jù)的相對(duì)變動(dòng)最小。在結(jié)果中,1.48舍位后變?yōu)榱?,6.48舍位后變?yōu)榱?,調(diào)整平衡的結(jié)果還是比較理想的。
這種方案需要將數(shù)據(jù)按絕對(duì)值排序,執(zhí)行效率不是很好,特別是在數(shù)據(jù)量比較大的情況下,排序會(huì)耗費(fèi)較多時(shí)間。
(3) 將平衡差按照最小調(diào)整值,由不為0的數(shù)據(jù)依次分擔(dān)。
在上一種調(diào)整舍位平衡的方案中,將誤差由絕對(duì)值大的一些數(shù)據(jù)來(lái)分擔(dān)。在實(shí)際操作中,為了提高效率,減少排序操作,就可以適當(dāng)簡(jiǎn)化,改為由順序排在前幾位的數(shù)據(jù)來(lái)分擔(dān)??紤]到在四舍五入時(shí),0并不會(huì)產(chǎn)生誤差,而且如果修改數(shù)據(jù)中的0,這樣的變動(dòng)會(huì)比較明顯,因此在調(diào)整時(shí)將保留原始數(shù)據(jù)中的0不變。
在這種規(guī)則下,前面問(wèn)題的舍位平衡處理如下:
A | B | C | |
1 | [1.48,0,1.42,0.32,6.48,0.98,1.39] | =A1.sum() | |
2 | =A1.(round(~)) | =round(B1)-A2.sum() | =sign(B2) |
3 | =A2.pselect@a(~!=0) | >abs(B2).run(A2(A3(#))+=C2) | =A2.sum() |
A3中選擇出原始數(shù)據(jù)中非0成員的序號(hào),在B3中調(diào)整舍位后數(shù)據(jù)時(shí),按順序分擔(dān)。調(diào)整后,A2和C3中的結(jié)果如下:
在結(jié)果中,1.48舍位后變?yōu)榱?,1.42舍位后變?yōu)榱?,調(diào)整平衡的結(jié)果比較合理。同時(shí)這種方案避免了排序操作,效率較高,因此這種舍位平衡的規(guī)則最為常用。
在處理單向舍位平衡時(shí),并非只有對(duì)一組序列求和的情況。更多的情況下,是對(duì)一批數(shù)據(jù)來(lái)求和,如下面的SalesRecord.txt中存儲(chǔ)的序表:
Name Jan Feb Mar Apr Allen 26106 49637 27760 33829 Billy 56611 50588 54765 76072 Charlie 21249 96825 28645 55958 Daisy 3413 49069 6279 98247 Flora 7590 12072 90034 64252 |
現(xiàn)在,需要統(tǒng)計(jì)每位員工4個(gè)月的總銷售額,統(tǒng)計(jì)時(shí)以千元為單位,并處理舍位平衡。代碼如下:
A | B | C | D | |
1 | =file("SalesRecord.txt").import@t() | =A1.derive(Jan+Feb+Mar+Apr:Sum) | =B1.derive() | |
2 | >5.(C1.field(#+1,C1.field(#+1).(round(~/1000)))) | =C1.derive(Jan+Feb+Mar+Apr:Sum2) | ||
3 | for B2 | >func(A5,A3) | ||
4 | =B2.derive(Jan+Feb+Mar+Apr:Sum3) | |||
5 | func | =A5.Sum-A5.Sum2 | =abs(B5) | =sign(B5)*1 |
6 | for C5 | =A5.field(1+B6) | >A5.field(1+B6,C6+D5) |
分步執(zhí)行代碼,A1中讀入序表后,在B1中添加合計(jì)字段Sum,結(jié)果如下:
在C1中將上面的序表復(fù)制,并在B1中將序表中的第2至第6個(gè)字段執(zhí)行舍位計(jì)算到以千為單位。此時(shí),有可能由于四舍五入計(jì)算破壞平衡,在B2中再添加一個(gè)字段Sum2,計(jì)算舍位后4個(gè)月的合計(jì)值。B2中的序表如下:
可以看到,在此時(shí),Sum與Sum2字段是有區(qū)別的,說(shuō)明需要調(diào)整舍位平衡。在這里雖然需要調(diào)整計(jì)算后序表中的數(shù)據(jù),但是每個(gè)數(shù)據(jù)只用于計(jì)算員工合計(jì),因此仍然屬于單向舍位平衡。
A5中的子程序用來(lái)處理一條記錄的舍位平衡,B5中計(jì)算平衡差,C5中計(jì)算出最小調(diào)整值。在B6中循環(huán),將平衡差拆分到記錄中前幾個(gè)數(shù)據(jù)中,這里簡(jiǎn)單處理,并未判斷數(shù)據(jù)是否非零。
在A3中,循環(huán)序表B2中的記錄,分別調(diào)整舍位平衡。調(diào)整完畢后,在A4中再添加Sum3字段來(lái)驗(yàn)證舍位平衡結(jié)果,A4中結(jié)果如下:
對(duì)比Sum與Sum3可以確認(rèn),結(jié)果調(diào)整,數(shù)據(jù)舍位后重新達(dá)成了平衡。
如果數(shù)據(jù)在行向和列向兩個(gè)方向同時(shí)需要計(jì)算合計(jì)值,同時(shí)還需要計(jì)算所有數(shù)據(jù)的總計(jì)值,這種情況下處理舍位平衡時(shí)就復(fù)雜得多了。此時(shí)處理舍位平衡時(shí),不僅要求最終的總計(jì)值準(zhǔn)確,同時(shí)行向和列向計(jì)算的合計(jì)值也要與對(duì)應(yīng)行、列的數(shù)據(jù)平衡,這種情況下的舍位平衡稱為雙向舍位平衡。如在SalesRecord.txt的數(shù)據(jù)中,需要再統(tǒng)計(jì)每個(gè)月的總銷售額,代碼如下:
A | B | C | |
1 | =file("SalesRecord.txt").import@t() | >A1.insert(0,"Total") | >4.(A1.m(-1).field(#+1,A1.field(#+1).to(, 5).sum())) |
2 | =A1.derive(Jan+Feb+Mar+Apr:Sum) | =A2.derive() | >5.(B2.field(#+1,B2.field(#+1).(round(~/1000)))) |
3 | =B2.derive(Jan+Feb+Mar+Apr:Sum2) | =A3.derive(Sum2-Sum:Diff) | >B3.insert(0,"Total2") |
4 | >5.(B3.m(-1).field(#+1, A3.field(#+1).to(,5).sum())) | >B3.insert(0,"Diff") | >5.(B3.m(-1).field(#+1,B3(6).field(#+1)- B3(7).field(#+1))) |
A1中讀入序表,并在B1中添加一條記錄,用來(lái)在D1中計(jì)算各月總銷售額。再在A2中添加字段計(jì)算每位員工的銷售總額,以及總合計(jì)值后,結(jié)果如下:
在C2中根據(jù)上面的匯總數(shù)據(jù),將結(jié)果舍位到以千元為單位。再根據(jù)舍位后的數(shù)據(jù),在A3中添加字段Sum2計(jì)算舍位后的員工合計(jì)值,在B3中添加字段Diff員工合計(jì)的平衡差。最后,再添加2條記錄,分別用來(lái)計(jì)算每個(gè)月的舍位合計(jì)值,以及平衡差。計(jì)算完成后,B3中結(jié)果如下:
可以看到,當(dāng)橫向和縱向分別做匯總時(shí),舍位后需要解決的平衡問(wèn)題就復(fù)雜得多了。此時(shí)修改任何一個(gè)舍位數(shù)據(jù),都會(huì)同時(shí)影響橫向和縱向兩個(gè)方向的合計(jì)計(jì)算,這樣的問(wèn)題稱為雙向舍位平衡。在上面的計(jì)算中,有一些平衡差只與合計(jì)值相關(guān),如Total這一行中最右側(cè)的平衡差,只與各月的合計(jì)有關(guān),這樣的平衡差稱為合計(jì)平衡差。在雙向舍位平衡表中,只存在一橫一縱兩個(gè)合計(jì)平衡差。其它的平衡差都會(huì)和具體數(shù)據(jù)相關(guān),如Feb這個(gè)月最下方的平衡差,這種平衡差稱為非合計(jì)平衡差。
我們先從一些比較簡(jiǎn)單的情況開始研究雙向舍位平衡:
(1)橫向與縱向的非合計(jì)平衡差符號(hào)相同。如下面的情況:
1.44 | 1.35 | 2.79 |
1.2 | 0 | 1.2 |
2.64 | 1.35 | 3.99 |
上面的表格中,存儲(chǔ)著2行2列的初始數(shù)據(jù),同時(shí)計(jì)算出了各行各列的合計(jì)值,以及所有數(shù)據(jù)的總計(jì)值。下面將這些數(shù)據(jù)四舍五入取整,并計(jì)算每一行/列的平衡差,結(jié)果如下:
1 | 1 | 3 | +1 |
1 | 0 | 1 | |
3 | 1 | 4 | |
+1 |
這里的“非合計(jì)平衡差”是指涉及原始數(shù)據(jù)的平衡差,此時(shí)合計(jì)數(shù)據(jù)及總計(jì)值都不需要調(diào)整??梢钥吹?,此時(shí)只是第1行和第1列的合計(jì)值不平衡,而且都是合計(jì)值比舍位數(shù)據(jù)的和大1,這種情況下,只需要調(diào)整交叉點(diǎn)處的數(shù)據(jù),根據(jù)平衡差符號(hào)加減最小調(diào)整值即可。具體操作是把交叉點(diǎn)處,即第1行第1列的數(shù)據(jù)舍位結(jié)果+1,就可獲得平衡,結(jié)果如下:
2 | 1 | 3 |
1 | 0 | 1 |
3 | 1 | 4 |
(2)同向的2個(gè)非合計(jì)平衡差符號(hào)相反。如下面的情況:
1.44 | 1.55 | 2.99 |
1.2 | 0.85 | 2.05 |
2.64 | 2.4 | 5.04 |
將這些數(shù)據(jù)四舍五入取整,并計(jì)算每一行/列的平衡差,結(jié)果如下:
1 | 2 | 3 | |
1 | 1 | 2 | |
3 | 2 | 5 | |
+1 | -1 |
這種情況下,仍然不需要調(diào)整總計(jì)值。由于第1列和第2列中的平衡差一正一負(fù),只需要任選一行平衡差為0的數(shù)據(jù),將這兩列的數(shù)分別根據(jù)按平衡差的符號(hào)加減最小調(diào)整值。如選擇第1行,將第1列的舍位結(jié)果+1,將第2列的舍位結(jié)果-1,就可獲得平衡,結(jié)果如下:
2 | 1 | 3 |
1 | 1 | 2 |
3 | 2 | 5 |
(3)某個(gè)合計(jì)平衡差與另一方向的非合計(jì)平衡差符號(hào)相反。如下面的情況:
1.44 | 1.55 | 2.99 |
1.2 | 0.97 | 2.17 |
2.64 | 2.52 | 5.16 |
將這些數(shù)據(jù)四舍五入取整,并計(jì)算每一行/列的平衡差,結(jié)果如下:
1 | 2 | 3 | |
1 | 1 | 2 | |
3 | 3 | 5 | -1 |
+1 |
這種情況下,說(shuō)明交叉點(diǎn)處的合計(jì)數(shù)據(jù)需要調(diào)整,只需要調(diào)整交叉點(diǎn)處的合計(jì)數(shù)據(jù),根據(jù)合計(jì)平衡差的符號(hào)加減最小調(diào)整值。在這里,即修改第1列的合計(jì)結(jié)果,根據(jù)橫向的合計(jì)平衡差,將其-1,即可獲得平衡,結(jié)果如下:
1 | 2 | 3 |
1 | 1 | 2 |
2 | 3 | 5 |
(4)某個(gè)合計(jì)平衡差與同方向的非合計(jì)平衡差符號(hào)相同。如下面的情況:
1.48 | 1 | 2.48 |
2.11 | 1.01 | 3.12 |
3.59 | 2.01 | 5.6 |
將這些數(shù)據(jù)四舍五入取整,并計(jì)算每一行/列的平衡差,結(jié)果如下:
1 | 1 | 2 | |
2 | 1 | 3 | |
4 | 2 | 6 | |
+1 | +1 |
在這里是列向的合計(jì)平衡差與另一列的平衡差符號(hào)相同,在這種情況下,可以任選1行平衡差為0的數(shù)據(jù),同時(shí)調(diào)整這2列的數(shù)據(jù)。如果選擇第1行,即同時(shí)調(diào)整第1行第1列,以及第1行的合計(jì)值,將它們分別+1即可獲得平衡,結(jié)果如下:
2 | 1 | 3 |
2 | 1 | 3 |
4 | 2 | 6 |
(5)兩個(gè)方向合計(jì)平衡差的符號(hào)相同。如下面的情況:
1.44 | 1.99 | 3.43 |
1.6 | 0.48 | 2.08 |
3.04 | 2.47 | 5.51 |
將這些數(shù)據(jù)四舍五入取整,并計(jì)算每一行/列的平衡差,結(jié)果如下:
1 | 2 | 3 | |
2 | 0 | 2 | |
3 | 2 | 6 | +1 |
+1 |
此時(shí),只有合計(jì)數(shù)據(jù)影響了結(jié)果的平衡。在這種情況下,可以任選一個(gè)非合計(jì)值,根據(jù)合計(jì)平衡差的符號(hào)加減最小調(diào)整值,同樣調(diào)整這個(gè)數(shù)據(jù)的橫向和縱向合計(jì)值。在上面例子中,可以任意選擇1個(gè)數(shù)據(jù),如第2行第2列的值,根據(jù)平衡差將它+1,同時(shí)將第2行以及第2列的合計(jì)值同時(shí)都+1,這樣就可以獲得平衡,如下:
1 | 2 | 3 |
2 | 1 | 3 |
3 | 3 | 6 |
由于是任選數(shù)據(jù),也有其它的處理方式,如選擇第1行第2列的數(shù)據(jù)修改,同樣可以獲得平衡,結(jié)果如下:
1 | 3 | 4 |
2 | 0 | 2 |
3 | 3 | 6 |
在處理雙向舍位平衡時(shí),只有上面的5種情況可以調(diào)整平衡。對(duì)于其它的情況,說(shuō)明計(jì)算有誤,是無(wú)法通過(guò)1次調(diào)整達(dá)成舍位平衡的。但是在實(shí)際處理中,上面的情況往往是混合出現(xiàn)的。因此,可以先處理第(1)種情況,即所有非合計(jì)行列平衡差符號(hào)相同的情況,再處理第(2)種情況,將非合計(jì)行/列中不同符號(hào)的平衡差消除。全部調(diào)整理完畢后,非合計(jì)行與非合計(jì)列的平衡差只能各為一種符號(hào)。此時(shí)再處理第(3)種和第(4)種情況,將非合計(jì)行/列的平衡差與合計(jì)行/列的平衡差配合消除。最后,如果兩個(gè)方向行/列的平衡差仍未消除,再按照第(5)中情況處理。這樣,就可以對(duì)一般性的表格完成雙向舍位平衡處理了。
再回到這一節(jié)開始時(shí)的銷售數(shù)據(jù)表,下面的代碼將處理其中的舍位平衡:
A | B | C | D | E | |
1 | =file("SalesRecord.txt").import@t() | >A1.insert(0,"Total") | >4.(A1.m(-1).field(#+1,A1.field(#+1).to(, 5).sum())) | ||
2 | =A1.derive(Jan+Feb+Mar+Apr:Sum) | =A2.derive() | >5.(B2.field(#+1,B2.field(#+1).(round(~/1000)))) | ||
3 | =B2.derive(Jan+Feb+Mar+Apr:Sum2) | =A3.derive(Sum-Sum2:Diff) | >B3.insert(0,"Total2") | ||
4 | >5.(B3.m(-1).field(#+1,A3.field(#+1).to(,5).sum())) | >B3.insert(0,"Diff") | >5.(B3.m(-1).field(#+1,B3(6).field(#+1)- B3(7).field(#+1))) | ||
5 | =B2.len() | =B2.fno() | =B3.(Diff).to(,A5) | =B3.m(-1).array().to(2,B5) | |
6 | for A5-1 | for B5-2 | for C5(A6)*D5(B6)>0 | =sign(C5(A6)) | >func(A26,B2(A6),B6+1,D6) |
7 | >C5(A6)-=D6 | >D5(B6)-=D6 | |||
8 | for A5-2 | for A5-1-A8 | for C5(A8)*C5(A8+B8)<0 | =sign(C5(A8)) | =D5.pselect(~==0) |
9 | >func(A26,B2(A8),E8+1,D8) | >func(A26,B2(A8+B8),E8+1,-D8) | |||
10 | >C5(A8)-=D8 | >C5(A8+B8)+=D8 | |||
11 | for B5-3 | for B5-2-A11 | for D5(A11) * D5(A11+B11) < 0 | =sign(D5(A11)) | =C5.pselect(~==0) |
12 | >func(A26,B2(E11),A11+1,D11) | >func(A26,B2(E11),A11+B11+1,-D11) | |||
13 | >D5(A11)-=D11 | >D5(A11+B11)+=D11 | |||
14 | if C5(A5)!=0 | for B5-2 | for C5(A5)*D5(B14)<0 | =sign(C5(A5)) | >func(A26,B2(A5),B14+1,D14) |
15 | >C5(A5)-=D14 | >D5(B14)+=D14 | |||
16 | if D5(B5-1)!=0 | for A5-1 | for C5(B16)*D5(B5-1)<0 | =sign(D5(B5-1)) | >func(A26,B2(B16),B5,D16) |
17 | >D5(B5-1)-=D16 | >C5(B16)+=D16 | |||
18 | if C5(A5)!=0 | for A5-1 | for C5(A5)*C5(B18)>0 | =sign(C5(A5)) | =D5.pselect(~==0) |
19 | >func(A26,B2(B18),E18+1,D18) | >func(A26,B2(A5),E18+1,D18) | |||
20 | >C5(A5)-=D18 | >C5(B18)-=D18 | |||
21 | if D5(B5-1)!=0 | for B5-2 | for D5(B21)*D5(B5-1)>0 | =sign(D5(B5-1)) | =C5.pselect(~==0) |
22 | >func(A26,B2(E21),B5,D21) | >func(A26,B2(E21),B21+1,D21) | |||
23 | >D5(B5-1)-=D21 | >D5(B21)-=D21 | |||
24 | if C5(A5)*D5(B5 -1)>0 | >func(A26,B2(1),2,C5(A5)) | >func(A26,B2(1),B5,C5(A5)) | >func(A26,B2(A5),2,C5(A5)) | |
25 | >C5(A5)=0 | >D5(B5-1)=0 | |||
26 | func | ||||
27 | =A26.field(B26) | >A26.field(B26,B27+C26) |
程序比較復(fù)雜,下面簡(jiǎn)要說(shuō)明一下功能。A26處的子程序用來(lái)修改序表中的1條記錄,將其指定位置的數(shù)據(jù)加上所需的調(diào)整值。由于用于計(jì)算的序表中,第一列為Name,實(shí)際并不參與計(jì)算,因此整理數(shù)據(jù)時(shí)將其跳過(guò)。C5和D5中分別獲得橫向和縱向的平衡差序列。在第6、7行,循環(huán)處理第(1)種情況,如果兩個(gè)方向的平衡差符號(hào)相同,改變交叉點(diǎn)處的舍位結(jié)果。在第8~13行,分橫縱兩種情況,處理第(2)種情況,如果同向的兩個(gè)平衡差符號(hào)相反時(shí),修改這兩行/列中的舍位結(jié)果。第14~17行,處理第(3)種情況,當(dāng)合計(jì)平衡差與另一方向的非合計(jì)平衡差符號(hào)相反時(shí),調(diào)整交叉點(diǎn)處的合計(jì)結(jié)果。在第18~23行,處理第(4)種情況,當(dāng)合計(jì)平衡差與同方向的非合計(jì)平衡差符號(hào)相同時(shí),修改這兩行/列中的數(shù)據(jù)。最后,在第24和25行,判斷前面的修改完成后,是否仍然存在兩個(gè)合計(jì)平衡差,此時(shí)相應(yīng)調(diào)整第1個(gè)數(shù)據(jù)的舍位結(jié)果,同時(shí)調(diào)整第1行和第1列的合計(jì)值。
雙向舍位平衡處理完成后,在B2中可以查看最終結(jié)果:
運(yùn)算時(shí),處理過(guò)程如下:
Name | Jan | Feb | Mar | Apr | Sum | Diff |
Allen | 26.0 | 50.0 | 28.0 | 34.0 | 137.0 | -1 |
Billy | 57.0 | 51.0 | 55.0 | 76.0 | 238.0 | -1 |
Charlie | 21.0 | 97.0 | 29.0 | 56.0 | 203.0 | 0 |
Daisy | 3.0 | 49.0 | 6.0 | 98.0 | 157.0 | 1 |
Flora | 8.0 | 12.0 | 90.0 | 64.0 | 174.0 | 0 |
Total | 115.0 | 258.0 | 207.0 | 328.0 | 909.0 | 1 |
Diff | 0 | -1 | -1 | 0 | 0 |
執(zhí)行第(1)步處理,將不同方向上符號(hào)相同的非合計(jì)平衡差消除后,結(jié)果如下:
Name | Jan | Feb | Mar | Apr | Sum | Diff |
Allen | 26.0 | 49.0 | 28.0 | 34.0 | 137.0 | 0 |
Billy | 57.0 | 51.0 | 54.0 | 76.0 | 238.0 | 0 |
Charlie | 21.0 | 97.0 | 29.0 | 56.0 | 203.0 | 0 |
Daisy | 3.0 | 49.0 | 6.0 | 98.0 | 157.0 | 1 |
Flora | 8.0 | 12.0 | 90.0 | 64.0 | 174.0 | 0 |
Total | 115.0 | 258.0 | 207.0 | 328.0 | 909.0 | 1 |
Diff | 0 | 0 | 0 | 0 | 0 |
這個(gè)例子中,執(zhí)行第(1)步處理后,并沒(méi)有符號(hào)相反的非合計(jì)平衡差,不需執(zhí)行第(2)步處理。在第(3)步處理中,查找合計(jì)平衡差是否與另一方向上的非合計(jì)平衡差符號(hào)相反的情況,同樣不存在。
在第(4)步處理中,查找合計(jì)平衡差與同向的非合計(jì)平衡差符號(hào)相同的情況,處理結(jié)果如下:
Name | Jan | Feb | Mar | Apr | Sum | Diff |
Allen | 26.0 | 49.0 | 28.0 | 34.0 | 137.0 | 0 |
Billy | 57.0 | 51.0 | 54.0 | 76.0 | 238.0 | 0 |
Charlie | 21.0 | 97.0 | 29.0 | 56.0 | 203.0 | 0 |
Daisy | 4.0 | 49.0 | 6.0 | 98.0 | 157.0 | 0 |
Flora | 8.0 | 12.0 | 90.0 | 64.0 | 174.0 | 0 |
Total | 116.0 | 258.0 | 207.0 | 328.0 | 909.0 | 0 |
Diff | 0 | 0 | 0 | 0 | 0 |
此時(shí),所有的平衡差已經(jīng)都變?yōu)榱?,說(shuō)明各個(gè)方向上的計(jì)算已經(jīng)恢復(fù)平衡,舍位平衡處理完成。如果仍未平衡,則需要進(jìn)一步執(zhí)行第(5)步處理。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
分享標(biāo)題:如何處理報(bào)表中的舍位平衡-創(chuàng)新互聯(lián)
轉(zhuǎn)載源于:http://jinyejixie.com/article24/isoje.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、定制網(wǎng)站、面包屑導(dǎo)航、用戶體驗(yàn)、小程序開發(fā)、網(wǎng)站營(yíng)銷
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容