Java 处理float()函数

Java 处理float()函数,java,processing,Java,Processing,首先,它是专门用于处理的,还是默认情况下存在于java中 当我在处理下面这行代码时 println(float("88") + "\t" + float("88\n") + "\t" + float("88p") ); // p is just an arbitrary character other than '\n' 它输出 88.0 88.0 NaN 那么,为什么float()函数可以与“\n”字符配合使用,而不能与“p”配合使用呢?他们不是都是角色吗?我知道'\n'是一种特殊的东西,

首先,它是专门用于处理的,还是默认情况下存在于java中

当我在处理下面这行代码时

println(float("88") + "\t" + float("88\n") + "\t" + float("88p") ); // p is just an arbitrary character other than '\n'
它输出

88.0 88.0 NaN
那么,为什么float()函数可以与“\n”字符配合使用,而不能与“p”配合使用呢?他们不是都是角色吗?我知道'\n'是一种特殊的东西,但在这种情况下,它会有区别吗


编辑:我已将“K”替换为“p”,因为答案中出现了一些警告。

大概,它将
\n
视为“无意义的填充物”(即,它可以安全地剥离)

此外,在这种情况下,
k
不仅仅是一个任意字符。例如,88k可以被解释为88000(这并不是一个非常少见的用法)。或者,也许这根本不是你的意思,k只是一个输入错误——不管怎样,框架都不知道,所以你实际上是在要求它读懂你的想法


再举一个例子,考虑一个像“代码>浮动”(“12ABF566X”)的例子。框架应该如何处理这个问题?我们完全不清楚如何合理地将其解释为一个确定的数字。

特定的浮点函数存在于处理过程中

java中有
Float.parseFloat(s:String):Float
。当传递无法识别为正确浮点数的字符串时,此函数应产生NumberFormatException


\n通常被视为空白或空白。字符串在解析之前会被特别修剪(也就是说,从所述字符串的开头和结尾删除空白和\r\n之类的字符)。K字符不会被删除,因此float()产生NaN(在Java中,您会得到NumberFormatException)

它只存在于处理中。如果您想在Java中使用类似的函数,有


我假设它与
\n
一起工作,因为这是一个换行符,是空白
float
可能会在解析值之前修剪空白
K
不是空格字符,也不是数字,因此无法将其解析为浮点。

好吧,我想我选择了一个危险的字符:D它只是任意的,没有任何意义,我尝试过使用“p”t“z”等。没有什么不同。@muyustan这是真的:)仍然,它可能具有图书馆作者在编写框架(像这样)时不知道(或没有想到)的文化内涵,在这种情况下,它是否应该被解释为88或88000还不清楚。重点是,在很多边缘情况下,如果允许这样的任意字符,则很难解释其意图,但在字符串末尾出现的换行符之类的字符不会产生歧义-您完全可以在不改变其含义的情况下安全地将其删除。好的,因此,在float()函数的实现中,它必须在将字符串转换为float之前修剪字符串中的“\n”字符,这样“\n”就不会导致任何问题。对吗?我还没有看过实现,但我假设是这样,因为它保证不会影响意义。我不是坐在处理的前面,但我很好奇,如果在字符串的中间放置<代码> \n>代码(如<代码>浮动(“8 \N8”)< /代码>)会发生什么?我假设,在这种情况下,它会抛出一个错误。是的,这是有道理的-这似乎支持了这样一种观点,即他们是在安全地使用它,并且只有在他们确信它不会改变含义时才剥离字符。因此,这与处理团队编写float()函数有关。对吗?还有,你知道我如何访问这个函数或任何其他处理函数的定义吗?它是开源的吗?是的,他们的源代码可以在GitHub上找到:
k
可能有实际的语义含义——如果我看到
88k
的印刷品,我会假设它们的意思是88000(很可能是88000美元或其他货币单位的88000美元)。对于
k
的特定情况,不清楚
float
是否应将其解释为88或88000。@EJoshuaS:可能有,但不适用于此函数。解析所有可能的后缀并不产生令人惊讶的结果是非常困难的。@knittl是的,这正是我在回答中提出的观点,事实上-有太多的边缘情况和歧义,无法合理地实现该行为。