我试图采取一个文本文件与它的分数。将字符串中的分数转换为bigdecimal。然后将结果分割并存储在堆栈上。
txt文件中的每一行都是一个分数,它是用分隔分子和分母的字符“/”随机生成的。分子和分母的长度可以为1-50,并且必须大于0。数字是随机生成的,因此需要存储小数位。在我的代码中,我首先将字符串转换为BigInteger,然后再转换为BigDecimal。这适用于第一个字符串,但会打断第二个字符串的分子。
public static void main(String[] args) throws FileNotFoundException {
File file = new File("C:/Users/eric/workspace/sortProj/src/data.txt");
FileReader fr = new FileReader(file);
Scanner scanner = new Scanner(fr);
Stack<BigDecimal> pile = new Stack<BigDecimal>();
String numerator = "";
String denominator = "";
while (scanner.hasNextLine()) {
String str = scanner.nextLine();
numerator = "";
denominator = "";
separateStrings(pile, numerator, denominator, str);
}
}
// appends chars to numerator string until it hits '/' then appends chars to
// denominator string
public static void separateStrings(Stack<BigDecimal> stack,
String numerator, String denominator, String source) {
boolean isNumerator = true;
for (int i = 0; i < source.length(); i++) {
if (source.charAt(i) == '/') {
isNumerator = false;
}
else if (isNumerator == true) {
numerator += source.charAt(i);
}else{
denominator += source.charAt(i);
}
}
//converts and stores fractions.
BigDecimal BD2 = new BigDecimal(new BigInteger(denominator, denominator.length()));
BigDecimal BD1 = new BigDecimal(new BigInteger(numerator, numerator.length()));
stack.push(BD1.divide(BD2, 20, BigDecimal.ROUND_FLOOR));
}
我犯了这个错误。
线程“main”java中出现异常。lang.NumberFormatException:基数在java中超出范围。数学大整数。(未知源)在排序时。separateStrings(sorting.java:60)
在分拣处。main(sorting.java:26)
它断开的字符串是分子="9821020392310432153773517114542035029"
我不知道为什么会出现这个错误。我的印象是BigInteger的长度可以达到50。另外,它在txt的第一行“8731472450870/1572580584296783758”上工作。
使用
BigDecimal BD2 = new BigDecimal(new BigInteger(denominator, 10));
.. 第二个参数是基数。(JavaDoc)
注意:您可以使用split(“/”)
方法,它可以为您节省大量低lvl工作。再看看JavaDoc。了解基本Java Api很好:]
错误是由以下对象引起的:
new BigInteger(denominator, denominator.length())
它试图创建基数为37的大整数,比允许的最大值36多1倍。
在本例中,您可能不需要设置基数,甚至不需要使用biginger
,因此只需使用:
BigDecimal bigDecimal = new BigDecimal(denominator);
我在线程“main”java中遇到异常。错误:未解析编译。 我做错了什么? 线程“main”中出现异常: java.lang.错误:未解决的编译问题: 对于类型在
代码重构后,我在尝试编译Maven项目时遇到以下错误: 我尝试删除文件夹但问题未解决。您知道如何解决此问题吗?
我有任务要做,我有一个问题,我得到了错误。我不知道怎么修理它: 线程“main”java.lang.NullPointerException在test.main(test.java:29)中出现异常
我有任务要做,我有一个问题,我得到了错误。我不知道如何修理它: 异常线程"main"java.lang.NullPointerExcema在test.main(test.java:29) 这是我的密码:
将折扣值-79%转换为79%时获取错误。 **for(int i=1; i
我从GitHub克隆了我的项目,现在我无法运行我的项目。 我收到以下错误: 知道是什么导致了这个错误吗? 编辑 我检查了这个问题Intellij在我发布到这里之前突然抛出ClassNotFoundException,它没有给我任何解决方案...为什么要将我的问题标记为重复,因为那个问题不能解决我的问题?