annotate src/entai/entai.go @ 0:de451fa0c9cd

golang repository.
author pyon@macmini
date Sat, 01 Oct 2016 11:16:31 +0900
parents
children 451c99c1d9de
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
1 /****************************************************************************/
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
2 /* Entai.go ( ver 0.1 ) */
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
3 /* Last Change: 2016-09-30 Fri 20:15:52. */
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
4 /****************************************************************************/
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
5
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
6 package entai
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
7
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
8 import (
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
9 "fmt"
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
10 "time"
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
11 )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
12
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
13 var rate0s, rate1s []float64
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
14 var nyds []time.Time
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
15
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
16 type Entai struct {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
17 tax int // 税額
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
18 ed int // 経過日数
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
19 yd0 []int // 各年の 1カ月以内の日数
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
20 yd1 []int // 各年の 1カ月超えの日数
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
21
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
22 due time.Time
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
23 paid time.Time
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
24 am time.Time
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
25 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
26
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
27 func init() {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
28 // 1カ月まで, 1カ月経過後, 元旦
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
29 createRates( 4.3, 14.6, "20120101" ) // H24
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
30 createRates( 4.3, 14.6, "20130101" ) // H25
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
31 createRates( 4.3, 14.6, "20140101" ) // H26
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
32 createRates( 2.9, 9.2, "20150101" ) // H27
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
33 createRates( 2.8, 9.1, "20160101" ) // H28
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
34 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
35
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
36 func createRates( r0, r1 float64, y string ) {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
37 t, _ := time.Parse( "20060102", y )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
38 rate0s = append( rate0s, r0 / 100 )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
39 rate1s = append( rate1s, r1 / 100 )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
40 nyds = append( nyds, t )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
41 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
42
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
43 func ( e Entai ) String() string {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
44 return "Entai....."
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
45 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
46
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
47 func ( e Entai ) GetRate() string {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
48 var str string
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
49 for i, n := range nyds {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
50 str += fmt.Sprintf( " (H%d) ", n.Year() - 1988 )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
51 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
52 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
53 return str
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
54 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
55
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
56 func ( e *Entai ) countDays() {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
57
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
58 for range nyds {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
59 e.yd0 = append( e.yd0, 0 )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
60 e.yd1 = append( e.yd1, 0 )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
61 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
62
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
63 // 1カ月後の算出
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
64 for tmp := e.due; ; {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
65 tmp = tmp.AddDate( 0, 0, 1 )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
66 for i, nyd := range nyds {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
67 if tmp.Year() == nyd.Year() {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
68 e.yd0[i]++
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
69 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
70 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
71 if tmp.Day() == e.due.Day() {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
72 e.am = tmp
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
73 break
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
74 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
75 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
76
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
77 // 過ぎた日数の算出
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
78 for i := 1; ; i++ {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
79 tmp := e.due.AddDate( 0, 0, i )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
80 for j, nyd := range nyds {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
81 if tmp.Year() == nyd.Year() {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
82 e.yd1[j]++
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
83 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
84 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
85 if e.paid.Sub( tmp ) == 0 {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
86 for j, _ := range nyds {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
87 e.yd1[j] -= e.yd0[j]
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
88 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
89 e.yd1[len(e.yd1)-1]--
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
90 e.ed = i - 1
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
91 break
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 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
95
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
96 func ( e *Entai ) Set( d, p time.Time, g int ) {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
97 e.due, e.paid = d, p
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
98 e.tax = g
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
99 e.countDays()
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
100 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
101
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
102 func ( e *Entai ) Result() ( int, string ) {
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 if e.tax < 2000 {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
106 return 0, "tax < 2000"
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
107 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
108 e.tax = int( e.tax / 1000 * 1000 ) // 端数処理
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
109
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
110 /* 本計算 */
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
111 var tmp float64
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
112 for i, _ := range nyds {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
113 tmp += float64(e.yd0[i]) * rate0s[i] + float64(e.yd1[i]) * rate1s[i]
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
114 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
115 tmp *= float64(e.tax) / 365.0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
116
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
117 /* 利息の後処理&端数処理 */
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
118 var intrst int
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
119 if tmp < 1000 {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
120 intrst = 0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
121 } else {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
122 intrst = int( tmp / 100 ) * 100
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 /* 追加情報 */
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
126 info := fmt.Sprintf( "%.2f,%d =", tmp, e.ed )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
127 for i, _ := range nyds {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
128 info += fmt.Sprintf( ": %d %d ", e.yd0[i], e.yd1[i] )
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 return intrst, info
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
132 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
133