From f7ff364b4f34803af2db578c6fba0db78cea45c1 Mon Sep 17 00:00:00 2001 From: Claudio Nave Date: Thu, 13 Dec 2018 00:40:30 +0100 Subject: [PATCH] Hotfix: Gestione degli zeri dei decimali --- build.fxbuild | 2 +- .../math/controller/FrazioniController.java | 13 ++++++------ src/it/nave/math/data/Fraction.java | 21 +++++++++---------- 3 files changed, 17 insertions(+), 19 deletions(-) diff --git a/build.fxbuild b/build.fxbuild index 65ab0f4..1d4d9e6 100644 --- a/build.fxbuild +++ b/build.fxbuild @@ -1,7 +1,7 @@ - + diff --git a/src/it/nave/math/controller/FrazioniController.java b/src/it/nave/math/controller/FrazioniController.java index c13b003..bc0e716 100644 --- a/src/it/nave/math/controller/FrazioniController.java +++ b/src/it/nave/math/controller/FrazioniController.java @@ -46,14 +46,13 @@ private void genera() { private void scriviFrazione(Fraction f) { if (!f.getPeriodo().isPresent()) { - String numeratore = (f.getIntera().get().matches("0+") ? "" : f.getIntera().get()) - + f.getAntiperiodo().orElse(""); + String intera = f.getIntera().get().replaceAll("^0+", ""); + String antiperiodo = f.getAntiperiodo().orElse("").replaceAll("0+$", ""); + String numeratore = intera + ((intera.isEmpty()) ? antiperiodo.replaceAll("^0+", "") : antiperiodo); String denominatore = "1"; - if (f.getAntiperiodo().isPresent()) { - long zero = f.getAntiperiodo().get().chars().count(); - for (int i = 0; i < zero; i++) { - denominatore += "0"; - } + long zero = antiperiodo.chars().count(); + for (int i = 0; i < zero; i++) { + denominatore += "0"; } numeratore1.setText(numeratore); denominatore1.setText(denominatore); diff --git a/src/it/nave/math/data/Fraction.java b/src/it/nave/math/data/Fraction.java index b335802..2150b2d 100644 --- a/src/it/nave/math/data/Fraction.java +++ b/src/it/nave/math/data/Fraction.java @@ -8,28 +8,27 @@ public class Fraction { private Optional periodo = Optional.empty(); public Fraction(String n) { - if (n.matches("\\d+")) { + n = n.trim().replace(",", ".").replace("(", "[").replace(")", "]"); + if (n.matches("^\\d+$")) { intera = Optional.of(n); - } else if (n.matches("\\d+[,.]\\d+")) { - String separator = (n.contains(".")) ? "\\." : ","; - String split[] = n.split(separator); + } else if (n.matches("^\\d+\\.\\d+$")) { + String split[] = n.split("\\."); intera = Optional.of(split[0]); antiperiodo = Optional.of(split[1]); periodo = Optional.empty(); - } else if (n.matches("\\d+[,.]\\[\\d+\\]$")) { - String separator = (n.contains(".")) ? "\\." : ","; - String split1[] = n.split(separator); + } else if (n.matches("^\\d+\\.\\[\\d+\\]$")) { + String split1[] = n.split("\\."); intera = Optional.of(split1[0]); String split2[] = split1[1].split("\\["); antiperiodo = Optional.empty(); periodo = Optional.of(split2[1].replaceAll("\\]", "")); - } else if (n.matches("\\d+[,.]\\d+\\[\\d+\\]$")) { - String separator = (n.contains(".")) ? "\\." : ","; - String split1[] = n.split(separator); + } else if (n.matches("^\\d+\\.\\d+\\[\\d+\\]$")) { + String split1[] = n.split("\\."); intera = Optional.of(split1[0]); String split2[] = split1[1].split("\\["); antiperiodo = Optional.of(split2[0]); - periodo = Optional.of(split2[1].replaceAll("\\]", "")); + String temp = split2[1].replaceAll("\\]", ""); + periodo = (temp.matches("0+")) ? Optional.empty() : Optional.of(temp); } else { throw new IllegalArgumentException(); }