Ecco qua il codice Java che realizza la cosa...
Nota: la classe org.apache.commons.lang.StringUtils; e' fornita dalla libreria
di utilita' Apache Commons Lang (http://commons.apache.org/lang/)
per cui per compilare e eseguire la classe ricordatevi di aggiungere commons-lang.jar
al vostro classpath.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import org.apache.commons.lang.StringUtils;
public class CharsNumber {
private BigDecimal v;
public CharsNumber(BigDecimal v) {
super();
this.v = v;
}
@Override
public String toString() {
return toString(v);
}
private static String toString(BigDecimal Valore) {
String result = ""; // risultato
String[] lettere = { "", "uno", "due", "tre", "quattro", "cinque",
"sei", "sette", "otto", "nove", "dieci", "undici", "dodici",
"tredici", "quattordici", "quindici", "sedici", "diciassette",
"diciotto", "diciannove", "venti", "trenta", "quaranta",
"cinquanta", "sessanta", "settanta", "ottanta", "novanta" };
String valore = "" + Valore.abs();
String resto = "/00";
valore = valore.replace(',', '.');
int k = valore.indexOf('.');
if (k >= 0) // l'importo รจ decimale
{
resto = "/" + valore.substring(k + 1);
if (resto.length() == 2) resto += "0";
if (resto.length() > 3) resto = resto.substring(0, 3);
valore = valore.substring(0, k);
}
if (valore == "0") // importo zero finisce subito
{
result += "zero";
valore = "";
}
k = valore.length() % 3;
// normalizzo la cifra in modo da poter avere dei gruppi di tre
if (k > 0) {
valore = StringUtils.leftPad(valore, valore.length() + (3 - k), '0');
}
k = -1;
while (valore.length() > 0) {
String parziale = "";
// mangia tre caratteri a destra
char[] c = valore.substring(valore.length() - 3,valore.length()).toCharArray();
valore = valore.substring(0, valore.length() - 3);
k++;
for (int j = 0; j < 3; j++) {
int x = Integer.parseInt(new Character(c[j]).toString());
if (x != 0) {
if (j == 0)
parziale += (x == 1) ? "cento" : lettere[x] + "cento";
if (j == 1)
parziale += (x < 3) ? lettere[x * 10] : lettere[x + 18];
if (j == 2) {
boolean dieci = (!parziale.endsWith("dieci"));
if (!dieci) {
parziale = parziale.substring(0, parziale.length() - 5);
}
parziale += (dieci) ? lettere[x] : lettere[x + 10];
if (dieci) {
for (String s : new String[] { "ao", "au", "io",
"iu" }) {
int i = parziale.indexOf(s);
String t = s.substring(1);
while (i >= 0) {
parziale = parziale.substring(0, i)
+ parziale.substring(i + 1);
i = parziale.indexOf(s);
}
}
} // if (dieci)
} // if (j==2)
} // if (j != 0)
} // for j
if (parziale.length() > 0) {
String[] mille = { "uno", "mille", "unmilione", "unmiliardo",
"millemiliardi", "unmilionedimiliardi",
"unmiliardodimiliardi", "", "mila", "milioni",
"miliardi", "milamiliardi", "milionidimiliardi",
"miliardidimiliardi" };
int j = k + 7;
if (parziale.equals("uno")) {
parziale = "";
j = k;
}
if (j > mille.length - 1)
result = "valore fuori dei limiti";
else
result = (k == 0) ? mille[j] + parziale : parziale
+ mille[j] + result;
}
} // while
result += resto;
if (Valore.doubleValue() < 0)
result = "meno" + result;
return result;
}
public static void main(String[] args) throws Exception {
BufferedReader console = new BufferedReader(
new InputStreamReader(java.lang.System.in)
);
java.lang.System.out.println("Numero: ");
String line = "";
while ((line = console.readLine()) != null) {
BigDecimal d = new BigDecimal(line);
java.lang.System.out.println("Lettere: " + new CharsNumber(d));
java.lang.System.out.print("Numero: ");
}
}
}
No comments:
Post a Comment