diff 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
line wrap: on
line diff
--- a/src/entai/entai.go	Thu Oct 06 00:55:26 2016 +0900
+++ b/src/entai/entai.go	Thu Oct 13 06:05:06 2016 +0900
@@ -1,6 +1,6 @@
 /****************************************************************************/
-/* Entai.go ( ver 0.1 )                                                     */
-/*                                    Last Change: 2016-09-30 Fri 20:15:52. */
+/* Entai.go ( ver 0.2 )                                                     */
+/*                                    Last Change: 2016-10-07 Fri 18:32:08. */
 /****************************************************************************/
 
 package entai
@@ -31,10 +31,11 @@
 	createRates( 4.3, 14.6, "20140101" )	// H26
 	createRates( 2.9,  9.2, "20150101" )	// H27
 	createRates( 2.8,  9.1, "20160101" )	// H28
+	createRates( 2.8,  9.1, "20170101" )	// H29 *****
 }
 
-func createRates( r0, r1 float64, y string ) {
-	t, _ := time.Parse( "20060102", y )
+func createRates( r0, r1 float64, nyd string ) {
+	t, _ := time.Parse( "20060102", nyd )
 	rate0s = append( rate0s, r0 / 100 )
 	rate1s = append( rate1s, r1 / 100 )
 	nyds   = append( nyds, t )
@@ -55,9 +56,9 @@
 
 func ( e *Entai ) countDays() {
 
-	for range nyds {
-		e.yd0 = append( e.yd0, 0 )
-		e.yd1 = append( e.yd1, 0 )
+	for i, _ := range nyds {
+		e.yd0[i] = 0
+		e.yd1[i] = 0
 	}
 
 	// 1カ月後の算出
@@ -72,6 +73,11 @@
 			e.am = tmp
             break
         }
+		if tmp == e.due.AddDate( 0, 1, 0 ) {
+			tmp = tmp.AddDate( 0, 0, -1 )
+			e.am = tmp
+            break
+		}
     }
 
 	// 過ぎた日数の算出
@@ -93,6 +99,13 @@
     }
 }
 
+func ( e *Entai ) Create() {
+	for range nyds {
+		e.yd0 = append( e.yd0, 0 )
+		e.yd1 = append( e.yd1, 0 )
+	}
+}
+
 func ( e *Entai ) Set( d, p time.Time, g int ) {
     e.due, e.paid = d, p
     e.tax = g
@@ -110,9 +123,9 @@
 	/* 本計算 */
 	var tmp float64
 	for i, _ := range nyds {
-		tmp += float64(e.yd0[i]) * rate0s[i] + float64(e.yd1[i]) * rate1s[i]
+		tmp += float64( e.yd0[i] ) * rate0s[i] + float64( e.yd1[i] ) * rate1s[i]
 	}
-	tmp *= float64(e.tax) / 365.0
+	tmp *= float64( e.tax ) / 365.0
 
 	/* 利息の後処理&端数処理 */
 	var intrst int
@@ -123,11 +136,13 @@
 	}
 
 	/* 追加情報 */
-	info := fmt.Sprintf( "%.2f,%d =", tmp, e.ed )
+	detail := fmt.Sprintf( "%d,%.0f,%d =", e.tax, tmp, e.ed )
 	for i, _ := range nyds {
-		info += fmt.Sprintf( ": %d %d ", e.yd0[i], e.yd1[i] )
+		tmp1 := float64( e.yd0[i] ) * rate0s[i] * float64( e.tax ) / 365.0
+		tmp2 := float64( e.yd1[i] ) * rate1s[i] * float64( e.tax ) / 365.0
+		detail += fmt.Sprintf( ": %d %d (%.0f+%.0f=%.0f)", e.yd0[i], e.yd1[i], tmp1, tmp2, tmp1 + tmp2 )
 	}
 
-    return intrst, info
+    return intrst, detail
 }