【发布时间】:2009-11-25 05:54:39
【问题描述】:
我确信这与我对行为的理解有关,而不是 parseFloat 的任何不一致的操作,但请耐心等待...
如果我以“IDCODE: (3.5)”格式输入,其中IDCODE可能是几个不同的预定义字符串,并且保证总是有括号,也保证括号之间有一个数字
我正在尝试将所有输入消化到 IDCODE 存储桶中并对值进行总计,因此需要抓取括号之间的任何内容并将其转换为浮点数以便我可以对其进行求和
为什么以下不起作用?
Float tot = 0;
String idCode = "";
while( !input.isEmpty() )
{
idCode = GetIdCode(input);
tot = tot + Float.parseFloat( input.substring(
input.indexOf( "(", input.indexOf( idCode ) ) + 1,
input.indexOf( ")", input.indexOf( idCode ) ) ) );
}
(抛出数字格式异常)
以下操作在哪里起作用
Float tot = 0;
String idCode = "";
while( !input.isEmpty() )
{
idCode = GetIdCode(input);
String temp = input.substring(
input.indexOf( "(", input.indexOf( idCode ) ) + 1,
input.indexOf( ")", input.indexOf( idCode ) ) );
tot = tot + Float.parseFloat( temp );
}
这对我来说似乎很奇怪 - 我保存到临时变量中造成的差异是什么?
【问题讨论】:
-
抛出异常时
input是什么。 -
为什么这些循环中的任何一个(除非失败)都不会永远循环?你永远不会改变
input,所以如果循环通过一次,它就永远不会结束。这表明您在每种情况下都删除了一些代码,并且您删除的代码可能包含对为什么一个表单失败而另一个表单成功的解释!-) -
抱歉 - 只是代码的一个片段 - 不应该把结尾括号放在那里 - 在这两种情况下输入是相同的 - 这就是我感到困惑的原因
-
@Georgie,我相信你的话,这两种情况都是一样的。但我还是想知道它是什么。
-
@Georgie - 这是极不可能的。 Java 根本不能那样工作。在“直接”情况下,您很可能没有传递您认为正在传递的子字符串。