annotate src/entai/entai.go @ 59:48e46bfe97fa

kaigo: pre-release eraline.
author pyon@macmini
date Wed, 12 Aug 2020 19:57:58 +0900
parents e4066309b04f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
1 /****************************************************************************/
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
2 /* Entai.go ( ver 0.3 ) */
5
e4066309b04f refactoring.
pyon@macmini
parents: 4
diff changeset
3 /* Last Change: 2016-10-22 Sat 15:06:28. */
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
4 /* By T.Mutoh */
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
5 /****************************************************************************/
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
6
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
7 package entai
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
8
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
9 import (
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
10 "fmt"
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
11 "strconv"
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
12 "time"
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
13 )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
14
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
15 var rate0s, rate1s []float64
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
16 var nyds []time.Time
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
17
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
18 type Entai struct {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
19 tax int // 税額
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
20 ed int // 経過日数
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
21 yd0 []int // 各年の 1カ月以内の日数
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
22 yd1 []int // 各年の 1カ月超えの日数
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
23
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
24 due time.Time
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
25 paid time.Time
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
26 am time.Time
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
27 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
28
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
29 func init() {
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
30 }
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
31
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
32 func ( e *Entai ) DefaultRates() {
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
33 // 1カ月まで, 1カ月経過後, 元旦
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
34 createRates( 4.3, 14.6, "20120101" ) // H24
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
35 createRates( 4.3, 14.6, "20130101" ) // H25
4
4c6bfc90d75c rate fix & not consider last date
pyon@macmini
parents: 3
diff changeset
36 createRates( 2.9, 9.2, "20140101" ) // H26
4c6bfc90d75c rate fix & not consider last date
pyon@macmini
parents: 3
diff changeset
37 createRates( 2.8, 9.1, "20150101" ) // H27
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
38 createRates( 2.8, 9.1, "20160101" ) // H28
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 0
diff changeset
39 createRates( 2.8, 9.1, "20170101" ) // H29 *****
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
40
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
41 for range nyds {
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
42 e.yd0 = append( e.yd0, 0 )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
43 e.yd1 = append( e.yd1, 0 )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
44 }
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
45 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
46
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 0
diff changeset
47 func createRates( r0, r1 float64, nyd string ) {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 0
diff changeset
48 t, _ := time.Parse( "20060102", nyd )
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
49 rate0s = append( rate0s, r0 / 100 )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
50 rate1s = append( rate1s, r1 / 100 )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
51 nyds = append( nyds, t )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
52 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
53
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
54 func ( e *Entai ) AddRates( nyd, r0, r1 string ) error {
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
55 rf0, err := strconv.ParseFloat( r0, 64 ); if err != nil {
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
56 return err
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
57 }
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
58 rf1, err := strconv.ParseFloat( r1, 64 ); if err != nil {
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
59 return err
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
60 }
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
61 createRates( rf0, rf1, nyd )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
62 e.yd0 = append( e.yd0, 0 )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
63 e.yd1 = append( e.yd1, 0 )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
64 return nil
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
65 }
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
66
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
67 func ( e Entai ) String() string {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
68 return "Entai....."
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
69 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
70
5
e4066309b04f refactoring.
pyon@macmini
parents: 4
diff changeset
71 func ( e Entai ) GetRates() ( str string ) {
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
72 for i, n := range nyds {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
73 str += fmt.Sprintf( " (H%d) ", n.Year() - 1988 )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
74 str += fmt.Sprintf( "%s :%4.1f / %4.1f\n", n.Format("2006.01.02"), rate0s[i] * 100, rate1s[i] * 100 )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
75 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
76 return str
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
77 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
78
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
79 func ( e *Entai ) countDays() {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
80
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 0
diff changeset
81 for i, _ := range nyds {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 0
diff changeset
82 e.yd0[i] = 0
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 0
diff changeset
83 e.yd1[i] = 0
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
84 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
85
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
86 // 1カ月後の算出
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
87 for tmp := e.due; ; {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
88 tmp = tmp.AddDate( 0, 0, 1 )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
89 for i, nyd := range nyds {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
90 if tmp.Year() == nyd.Year() {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
91 e.yd0[i]++
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
92 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
93 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
94 if tmp.Day() == e.due.Day() {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
95 e.am = tmp
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
96 break
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
97 }
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 0
diff changeset
98 if tmp == e.due.AddDate( 0, 1, 0 ) {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 0
diff changeset
99 tmp = tmp.AddDate( 0, 0, -1 )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 0
diff changeset
100 e.am = tmp
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 0
diff changeset
101 break
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 0
diff changeset
102 }
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
103 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
104
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
105 // 過ぎた日数の算出
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
106 for i := 1; ; i++ {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
107 tmp := e.due.AddDate( 0, 0, i )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
108 for j, nyd := range nyds {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
109 if tmp.Year() == nyd.Year() {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
110 e.yd1[j]++
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
111 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
112 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
113 if e.paid.Sub( tmp ) == 0 {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
114 for j, _ := range nyds {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
115 e.yd1[j] -= e.yd0[j]
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
116 }
4
4c6bfc90d75c rate fix & not consider last date
pyon@macmini
parents: 3
diff changeset
117 e.ed = i
4c6bfc90d75c rate fix & not consider last date
pyon@macmini
parents: 3
diff changeset
118 //e.yd1[len(e.yd1)-1]-- // コメントアウト:最終日を参入しない
4c6bfc90d75c rate fix & not consider last date
pyon@macmini
parents: 3
diff changeset
119 //e.ed-- // 同上
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
120 break
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
121 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
122 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
123 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
124
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
125 func ( e *Entai ) Set( d, p time.Time, g int ) {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
126 e.due, e.paid = d, p
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
127 e.tax = g
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
128 e.countDays()
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
129 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
130
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
131 func ( e *Entai ) Result() ( int, string ) {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
132
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
133 /* 税額の前処理 */
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
134 if e.tax < 2000 {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
135 return 0, "tax < 2000"
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
136 }
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
137 e.tax = int( e.tax / 1000 ) * 1000 // 端数処理
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
138
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
139 /* 本計算 */
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
140 var tmp float64
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
141 for i, _ := range nyds {
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 0
diff changeset
142 tmp += float64( e.yd0[i] ) * rate0s[i] + float64( e.yd1[i] ) * rate1s[i]
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
143 }
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 0
diff changeset
144 tmp *= float64( e.tax ) / 365.0
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
145
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
146 /* 利息の後処理&端数処理 */
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
147 var intrst int
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
148 if tmp < 1000 {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
149 intrst = 0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
150 } else {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
151 intrst = int( tmp / 100 ) * 100
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
152 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
153
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
154 /* 追加情報 */
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 0
diff changeset
155 detail := fmt.Sprintf( "%d,%.0f,%d =", e.tax, tmp, e.ed )
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
156 for i, _ := range nyds {
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 0
diff changeset
157 tmp1 := float64( e.yd0[i] ) * rate0s[i] * float64( e.tax ) / 365.0
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 0
diff changeset
158 tmp2 := float64( e.yd1[i] ) * rate1s[i] * float64( e.tax ) / 365.0
4
4c6bfc90d75c rate fix & not consider last date
pyon@macmini
parents: 3
diff changeset
159 detail += fmt.Sprintf( ": %d %d (%.1f+%.1f=%.1f)", e.yd0[i], e.yd1[i], tmp1, tmp2, tmp1 + tmp2 )
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
160 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
161
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 0
diff changeset
162 return intrst, detail
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
163 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
164