Created
October 6, 2016 21:02
-
-
Save appersiano/5c14849ab3f73f2a9c2ad56cf63ba030 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class ScaglioniExample { | |
public static void main(String[] args){ | |
System.out.println("Esempio Calcolo IRPEF"); | |
ScaglioniHelper test = new ScaglioniHelper(78000); | |
ScaglioniHelper.Scaglione uno = new ScaglioniHelper.Scaglione(15000,23); | |
ScaglioniHelper.Scaglione due = new ScaglioniHelper.Scaglione(28000,27); | |
ScaglioniHelper.Scaglione tre = new ScaglioniHelper.Scaglione(55000,41); | |
ScaglioniHelper.Scaglione quattro = new ScaglioniHelper.Scaglione(75000,43); | |
test.addScaglione(uno); | |
test.addScaglione(due); | |
test.addScaglione(tre); | |
test.addScaglione(quattro); | |
System.out.println(test.toString()); | |
System.out.println("Totale IRPEF: " + test.calcolaValore()); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.ArrayList; | |
import java.util.List; | |
/* | |
Classe di utility per il calcolo degli scaglioni, tipicamente presenti nel calcolo | |
delle tasse italiano come ad esempio l'IRPEF o l'addizionale regionale | |
Ispirato da: http://www.lidimatematici.it/blog/2013/11/11/formula-esplicita-del-calcolo-irpef/ | |
*/ | |
class ScaglioniHelper { | |
private long imponibile; | |
private List<Scaglione> scaglioneList = new ArrayList<>(); | |
ScaglioniHelper(long imponibile) { | |
this.imponibile = imponibile; | |
} | |
void addScaglione(Scaglione scaglione) { | |
scaglioneList.add(scaglione); | |
} | |
/** | |
* Restituisce la somma delle aliquote | |
* @return ret | |
*/ | |
double calcolaValore(boolean printIntermedi) { | |
double ret = 0; | |
for (int i = 0; i < scaglioneList.size(); i++) { | |
double aliquota = scaglioneList.get(i).getAliquota(); | |
double scaglioneMax = scaglioneList.get(i).getLimiteScaglione(); | |
double scaglioneMaxPrecedente = 0; | |
if (i == 0) { | |
scaglioneMaxPrecedente = 0; | |
} else { | |
scaglioneMaxPrecedente = scaglioneList.get(i - 1).getLimiteScaglione(); | |
} | |
if (i == scaglioneList.size() - 1) scaglioneMax = Long.MAX_VALUE; | |
double calcolo = (aliquota / 100) * Math.max(0, Math.min(this.imponibile, scaglioneMax) - scaglioneMaxPrecedente); | |
if (printIntermedi) | |
System.out.println(calcolo); | |
ret += calcolo; | |
} | |
return ret; | |
} | |
@Override | |
public String toString() { | |
StringBuilder stringBuilder = new StringBuilder(); | |
stringBuilder.append("Imponibile " + imponibile); | |
stringBuilder.append(System.lineSeparator()); | |
stringBuilder.append("==========================="); | |
stringBuilder.append(System.lineSeparator()); | |
stringBuilder.append("Scaglione\t\tAliquota"); | |
stringBuilder.append(System.lineSeparator()); | |
for (int i = 0; i < scaglioneList.size(); i++) { | |
stringBuilder.append(scaglioneList.get(i).getLimiteScaglione()); | |
stringBuilder.append("\t\t\t"); | |
stringBuilder.append(scaglioneList.get(i).getAliquota() + "%"); | |
stringBuilder.append(System.lineSeparator()); | |
} | |
return stringBuilder.toString(); | |
} | |
/** | |
* Classe statica per creare uno Scaglione | |
*/ | |
static class Scaglione { | |
private long limiteScaglione; | |
private double aliquota; | |
Scaglione(long limiteScaglione, double aliquota) { | |
this.limiteScaglione = limiteScaglione; | |
this.aliquota = aliquota; | |
} | |
long getLimiteScaglione() { | |
return limiteScaglione; | |
} | |
double getAliquota() { | |
return aliquota; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment