Mercurial > mercurial > hgweb_golang.cgi
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 |