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 |
