gpt4 book ai didi

Java parseFloat 似乎表现不一致

转载 作者:行者123 更新时间:2023-11-29 08:19:04 29 4
gpt4 key购买 nike

我确信这与我对行为的理解有关,而不是 parseFloat 方面的任何不一致操作,但请耐心等待...

如果我输入格式为“IDCODE: (3.5)” 其中IDCODE可能是几个不同的预定义字符串,并且保证始终有括号,并且括号之间也保证有数字

我正在尝试将所有输入消化到 IDCODE 桶中并对值求和,因此需要获取括号之间的任何内容并将其转换为 float 以便我可以对其求和

为什么以下不起作用?

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 );
}

这对我来说似乎很奇怪 - 保存到临时变量中有什么不同?

最佳答案

当您的代码无法正常工作时,就该进行一些老式的调试了。与 SO 上的一百个人的建议相比,您将从中获得更多的好处,除非建议当然是进行一些好的老式调试 :-)

将您的非工作人员更改为:

while( !input.isEmpty() )
{
idCode = GetIdCode(input);

// New lines below.
System.out.println ("input = [" + input + "]");
System.out.println ("idCode = [" + idCode + "]");

int i1 = input.indexOf(idCode);
System.out.println ("offst1 = [" + i1 + "]");

int i2 = input.indexOf("(",i1);
System.out.println ("offst2 = [" + i2 + "]");

int i3 = input.indexOf(")",i1);
System.out.println ("offst3 = [" + i3 + "]");

String s1 = input.substring(i2+1,i3);
System.out.println ("strng1 = [" + s1 + "]");

float f1 = Float.parseFloat(s1);
System.out.println ("float1 = [" + f1 + "]");
// New lines above.

tot = tot + Float.parseFloat( input.substring(
input.indexOf( "(", input.indexOf( idCode ) ) + 1,
input.indexOf( ")", input.indexOf( idCode ) ) ) );

然后让我们知道输出是什么,尽管您很有可能会自己发现问题。

那些 println 语句应该几乎涵盖所有可能的问题,如果它确实在该代码中的话。

例如下面的项目:

public class xx {
public static void main(String args[]) {
String idCode = "CT";
String input = "fgdfgdg CT: (2.57)";

System.out.println ("input = [" + input + "]");
System.out.println ("idCode = [" + idCode + "]");

int i1 = input.indexOf(idCode);
System.out.println ("offst1 = [" + i1 + "]");

int i2 = input.indexOf("(",i1);
System.out.println ("offst2 = [" + i2 + "]");

int i3 = input.indexOf(")",i1);
System.out.println ("offst3 = [" + i3 + "]");

String s1 = input.substring(i2+1,i3);
System.out.println ("strng1 = [" + s1 + "]");

float f1 = Float.parseFloat(s1);
System.out.println ("float1 = [" + f1 + "]");

System.out.println ("full = [" + Float.parseFloat( input.substring(
input.indexOf( "(", input.indexOf( idCode ) ) + 1,
input.indexOf( ")", input.indexOf( idCode ) ) )) + "]");
}
}

给我:

input  = [fgdfgdg CT: (2.57)]
idCode = [CT]
offst1 = [8]
offst2 = [12]
offst3 = [17]
strng1 = [2.57]
float1 = [2.57]
full = [2.57]

特别是,最后一行的打印对我来说没问题,这一事实让我相信您显示的代码没有任何问题。我认为问题出在其他地方。

关于Java parseFloat 似乎表现不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1794939/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com