调查有关String.valueOf(float)的Java错误

调查有关String.valueOf(float)的Java错误,java,locale,Java,Locale,在Java中,String.valueOf(float)可能会根据代码运行的操作系统、Java版本和/或操作系统语言环境对浮点数进行不同的格式设置 例如,对于浮点数4.5,它是否会被格式化为“4,5”而不是“4.5”String.valueOf(float)调用float.toString() Float.toString()调用internsun.misc.FloatingDecimal.toJavaFormatString(Float) 结果字符串将永远不会包含符号,,因为在二进制文件toa

在Java中,String.valueOf(float)可能会根据代码运行的操作系统、Java版本和/或操作系统语言环境对浮点数进行不同的格式设置

例如,对于浮点数4.5,它是否会被格式化为“4,5”而不是“4.5”

String.valueOf(float)
调用
float.toString()

Float.toString()
调用intern
sun.misc.FloatingDecimal.toJavaFormatString(Float)

结果字符串将永远不会包含符号
,因为在
二进制文件toasciibuffer.getChars(chars[])中有硬编码的
(ASCII:46)


如果您反编译
sun.misc.FloatingDecimal
类(在我的例子中是Java8JDK),您可以看到它;如果您指定了正确的区域设置,则可以看到它。否则(未声明的区域设置)这是一个功能。OS和区域设置:不,它们应该是相同的。Java版本:可能,但不太可能:这是一种非常基本的行为,如果在不同版本之间进行更改,会让很多人感到不安。@AndyTurner不可能@Najzero这与区域设置无关。@AndyTurner“可能”听起来至少比实际情况高出两个数量级:)这是JDK1.0中的一种方法,Java从不更改任何契约。