summaryrefslogtreecommitdiff
path: root/sanitize_price.go
diff options
context:
space:
mode:
authorhorus_arch2018-02-04 20:01:00 +0100
committerhorus_arch2018-02-04 20:01:00 +0100
commita8a23a6cb3f20a3e1813f191727bcdb9c6884548 (patch)
tree85ea923897f40692cbb0329be886543bc1997b4f /sanitize_price.go
parentfc30c6e856ba8f59cd46c20f76f61f249d8bd88b (diff)
downloadalkobote-a8a23a6cb3f20a3e1813f191727bcdb9c6884548.tar.gz
Better Makefile. Source: https://www.complicissimus.de/golang-makefile/
Diffstat (limited to 'sanitize_price.go')
-rw-r--r--sanitize_price.go82
1 files changed, 82 insertions, 0 deletions
diff --git a/sanitize_price.go b/sanitize_price.go
new file mode 100644
index 0000000..5be9e67
--- /dev/null
+++ b/sanitize_price.go
@@ -0,0 +1,82 @@
+package main
+
+import (
+ "errors"
+ "strconv"
+ "strings"
+)
+
+func sanitize_price(price string) (int, error) {
+ multiply_by_100 := false
+
+ price = strings.TrimSpace(price)
+
+ price = strings.TrimPrefix(price, "€")
+ price = strings.TrimSpace(price)
+
+ price = strings.TrimSuffix(price, "€")
+ price = strings.TrimSpace(price)
+
+ c := string(price[len(price)-2:])
+ c = string(c[0:1])
+
+ /*
+ Extracts the second last char and checks if it's a "." or a ",".
+ */
+ if "," == c {
+ if strings.Count(price, ",") > 1 {
+ return 0, errors.New("Invalid format")
+ }
+
+ multiply_by_10 = true
+
+ } else if "." == c {
+ if strings.Count(price, ".") > 1 {
+ return 0, errors.New("Invalid format")
+ }
+
+ multiply_by_10 = true
+
+ }
+
+ c := string(price[len(price)-3:])
+ c = string(c[0:1])
+
+ /*
+ Extracts the third last char and checks if it's a "." or a ",".
+ */
+ if "," == c {
+ if strings.Count(price, ",") > 1 {
+ return 0, errors.New("Invalid format")
+ }
+
+ multiply_by_100 = true
+
+ } else if "." == c {
+ if strings.Count(price, ".") > 1 {
+ return 0, errors.New("Invalid format")
+ }
+
+ multiply_by_100 = true
+
+ }
+
+ price = strings.Replace(price, ",", "", -1)
+ price = strings.Replace(price, ".", "", -1)
+
+ /*
+ Casts the price to integer in cents (not euro!).
+ */
+ price_int, err := strconv.Atoi(price)
+ if err != nil {
+ return 0, err
+ }
+
+ if multiply_by_10 {
+ price_int = price_int * 10
+ } else if multiply_by_100 {
+ price_int = price_int * 100
+ }
+
+ return price_int, nil
+}