comparison src/entai/entai.go @ 2:451c99c1d9de

implement intaractive mode.
author pyon@macmini
date Thu, 13 Oct 2016 06:05:06 +0900
parents de451fa0c9cd
children ca866a38a6a0
comparison
equal deleted inserted replaced
1:3dafd57af3b1 2:451c99c1d9de
1 /****************************************************************************/ 1 /****************************************************************************/
2 /* Entai.go ( ver 0.1 ) */ 2 /* Entai.go ( ver 0.2 ) */
3 /* Last Change: 2016-09-30 Fri 20:15:52. */ 3 /* Last Change: 2016-10-07 Fri 18:32:08. */
4 /****************************************************************************/ 4 /****************************************************************************/
5 5
6 package entai 6 package entai
7 7
8 import ( 8 import (
29 createRates( 4.3, 14.6, "20120101" ) // H24 29 createRates( 4.3, 14.6, "20120101" ) // H24
30 createRates( 4.3, 14.6, "20130101" ) // H25 30 createRates( 4.3, 14.6, "20130101" ) // H25
31 createRates( 4.3, 14.6, "20140101" ) // H26 31 createRates( 4.3, 14.6, "20140101" ) // H26
32 createRates( 2.9, 9.2, "20150101" ) // H27 32 createRates( 2.9, 9.2, "20150101" ) // H27
33 createRates( 2.8, 9.1, "20160101" ) // H28 33 createRates( 2.8, 9.1, "20160101" ) // H28
34 createRates( 2.8, 9.1, "20170101" ) // H29 *****
34 } 35 }
35 36
36 func createRates( r0, r1 float64, y string ) { 37 func createRates( r0, r1 float64, nyd string ) {
37 t, _ := time.Parse( "20060102", y ) 38 t, _ := time.Parse( "20060102", nyd )
38 rate0s = append( rate0s, r0 / 100 ) 39 rate0s = append( rate0s, r0 / 100 )
39 rate1s = append( rate1s, r1 / 100 ) 40 rate1s = append( rate1s, r1 / 100 )
40 nyds = append( nyds, t ) 41 nyds = append( nyds, t )
41 } 42 }
42 43
53 return str 54 return str
54 } 55 }
55 56
56 func ( e *Entai ) countDays() { 57 func ( e *Entai ) countDays() {
57 58
58 for range nyds { 59 for i, _ := range nyds {
59 e.yd0 = append( e.yd0, 0 ) 60 e.yd0[i] = 0
60 e.yd1 = append( e.yd1, 0 ) 61 e.yd1[i] = 0
61 } 62 }
62 63
63 // 1カ月後の算出 64 // 1カ月後の算出
64 for tmp := e.due; ; { 65 for tmp := e.due; ; {
65 tmp = tmp.AddDate( 0, 0, 1 ) 66 tmp = tmp.AddDate( 0, 0, 1 )
70 } 71 }
71 if tmp.Day() == e.due.Day() { 72 if tmp.Day() == e.due.Day() {
72 e.am = tmp 73 e.am = tmp
73 break 74 break
74 } 75 }
76 if tmp == e.due.AddDate( 0, 1, 0 ) {
77 tmp = tmp.AddDate( 0, 0, -1 )
78 e.am = tmp
79 break
80 }
75 } 81 }
76 82
77 // 過ぎた日数の算出 83 // 過ぎた日数の算出
78 for i := 1; ; i++ { 84 for i := 1; ; i++ {
79 tmp := e.due.AddDate( 0, 0, i ) 85 tmp := e.due.AddDate( 0, 0, i )
91 break 97 break
92 } 98 }
93 } 99 }
94 } 100 }
95 101
102 func ( e *Entai ) Create() {
103 for range nyds {
104 e.yd0 = append( e.yd0, 0 )
105 e.yd1 = append( e.yd1, 0 )
106 }
107 }
108
96 func ( e *Entai ) Set( d, p time.Time, g int ) { 109 func ( e *Entai ) Set( d, p time.Time, g int ) {
97 e.due, e.paid = d, p 110 e.due, e.paid = d, p
98 e.tax = g 111 e.tax = g
99 e.countDays() 112 e.countDays()
100 } 113 }
108 e.tax = int( e.tax / 1000 * 1000 ) // 端数処理 121 e.tax = int( e.tax / 1000 * 1000 ) // 端数処理
109 122
110 /* 本計算 */ 123 /* 本計算 */
111 var tmp float64 124 var tmp float64
112 for i, _ := range nyds { 125 for i, _ := range nyds {
113 tmp += float64(e.yd0[i]) * rate0s[i] + float64(e.yd1[i]) * rate1s[i] 126 tmp += float64( e.yd0[i] ) * rate0s[i] + float64( e.yd1[i] ) * rate1s[i]
114 } 127 }
115 tmp *= float64(e.tax) / 365.0 128 tmp *= float64( e.tax ) / 365.0
116 129
117 /* 利息の後処理&端数処理 */ 130 /* 利息の後処理&端数処理 */
118 var intrst int 131 var intrst int
119 if tmp < 1000 { 132 if tmp < 1000 {
120 intrst = 0 133 intrst = 0
121 } else { 134 } else {
122 intrst = int( tmp / 100 ) * 100 135 intrst = int( tmp / 100 ) * 100
123 } 136 }
124 137
125 /* 追加情報 */ 138 /* 追加情報 */
126 info := fmt.Sprintf( "%.2f,%d =", tmp, e.ed ) 139 detail := fmt.Sprintf( "%d,%.0f,%d =", e.tax, tmp, e.ed )
127 for i, _ := range nyds { 140 for i, _ := range nyds {
128 info += fmt.Sprintf( ": %d %d ", e.yd0[i], e.yd1[i] ) 141 tmp1 := float64( e.yd0[i] ) * rate0s[i] * float64( e.tax ) / 365.0
142 tmp2 := float64( e.yd1[i] ) * rate1s[i] * float64( e.tax ) / 365.0
143 detail += fmt.Sprintf( ": %d %d (%.0f+%.0f=%.0f)", e.yd0[i], e.yd1[i], tmp1, tmp2, tmp1 + tmp2 )
129 } 144 }
130 145
131 return intrst, info 146 return intrst, detail
132 } 147 }
133 148