Код терпит крах, когда я ввожу менее чем 15-значный номер
Я сделал приложение для преобразования цифр в текст, но оно просто вылетает, если я ввожу меньше этого 15-значного числа.Он также показывает следующие десятки мест, где он должен быть.Если я введу больше, чем 15 цифр, то это займет только первые 15, в то время как он ничего не должен делать
package com.example.convertnumbertotext; import java.math.BigInteger; import java.text.DecimalFormat; public class EnglishNumberToWords { private static BigInteger bi = new BigInteger("100"); private static BigInteger bi2 = new BigInteger("20"); private static BigInteger bi3 = new BigInteger("10"); private static final String[] tensNames = { "", " ten", " twenty", " thirty", " forty", " fifty", " sixty", " seventy", " eighty", " ninety", }; private static final String[] numNames = { "", " one", " two", " three", " four", " five", " six", " seven", " eight", " nine", " ten", " eleven", " twelve", " thirteen", " fourteen", " fifteen", " sixteen", " seventeen", " eighteen", " nineteen" }; private static String convertLessThanOneThousand(BigInteger number) { String veryFar = ""; BigInteger[] bii = number.divideAndRemainder(bi); BigInteger[] bii2 = number.divideAndRemainder(bi3); int resut = bii[1].compareTo(bi2); if (resut == -1) { veryFar = numNames[bii[1].intValue()]; number = number.divide(bi); } else if (resut == 1 || resut == 0) { veryFar = numNames[bii2[1].intValue()]; number = number.divide(bi3); veryFar = tensNames[bii2[1].intValue()] + veryFar; number = number.divide(bi3); } if (number.compareTo(BigInteger.valueOf(0)) == 0) return veryFar; return numNames[number.intValue()] + " hundred" + veryFar; } public static String convert (BigInteger number){ // 0 to 999 999 999 999 if (number.compareTo(BigInteger.valueOf(0)) == 0) { return "zero"; } String snumber = number.toString(); // pad with "0" String mask = "000000000000"; DecimalFormat df = new DecimalFormat(mask); snumber = df.format(number); BigInteger trillions = new BigInteger(snumber.substring(0, 3)); // nnnXXXnnnnnnnnn BigInteger billions = new BigInteger(snumber.substring(3, 6)); // nnnnnnXXXnnnnnn BigInteger millions = new BigInteger(snumber.substring(6, 9)); // nnnnnnnnnXXXnnn BigInteger hundredThousands = new BigInteger(snumber.substring(9, 12)); // nnnnnnnnnnnnXXX BigInteger thousands = new BigInteger(snumber.substring(12, 15)); String tradTrillions; if (trillions.compareTo(BigInteger.valueOf(0)) == 0) { tradTrillions = ""; } else if (trillions.compareTo(BigInteger.valueOf(1)) == 0) { tradTrillions = convertLessThanOneThousand(trillions) + " trillion "; } else { tradTrillions = convertLessThanOneThousand(trillions) + " trillion "; } String result = tradTrillions; String tradBillions; if (billions.compareTo(BigInteger.valueOf(0)) == 0) { tradBillions = ""; } else if (billions.compareTo(BigInteger.valueOf(1)) == 0) { tradBillions = convertLessThanOneThousand(billions) + " billion "; } else { tradBillions = convertLessThanOneThousand(billions) + " billion "; } result = result + tradBillions; String tradMillions; if (millions.compareTo(BigInteger.valueOf(0)) == 0) { tradMillions = ""; } else if (millions.compareTo(BigInteger.valueOf(1)) == 0) { tradMillions = convertLessThanOneThousand(millions) + " million "; } else { tradMillions = convertLessThanOneThousand(millions) + " million "; } result = result + tradMillions; String tradHundredThousands; if (hundredThousands.compareTo(BigInteger.valueOf(0)) == 0) { tradHundredThousands = ""; } else if (hundredThousands.compareTo(BigInteger.valueOf(1)) == 0) { tradHundredThousands = "one thousand "; } else { tradHundredThousands = convertLessThanOneThousand(hundredThousands) + " thousand "; } result = result + tradHundredThousands; String tradThousand; tradThousand = convertLessThanOneThousand(thousands); result = result + tradThousand; // remove extra spaces! return result.replaceAll("^\\s+", "").replaceAll("\\b\\s{2,}\\b", " "); } }
<pre lang="text">
Что я уже пробовал:
Я попытался добавить пустое пространство в начало массива tensname.Я использовал отладчик, он показал мне, что триллионы, миллиарды, миллионы и сотни тысяч были назначены в 12-значном числе, когда была установлена точка останова на тысячах.Это должно было быть на 1 ступень ниже.Что я должен сделать, чтобы исправить это
CPallini
Это не полный код, вы не показываете, как вы его вызываете.