提问人:Nova 提问时间:7/24/2023 最后编辑:Nova 更新时间:9/12/2023 访问量:72
如何在 C# 中复制 Java 的 Float.ToString()?
How do I replicate Java's Float.ToString() in C#?
问:
正如文档在 Java 的 Float.toString(float) 方法中所述,浮点数仅用从相邻的浮点值中唯一标识值所需的数字表示。此行为不会反映在 C# 的方法中。Single.ToString
这意味着在 Java 中:
1500.45504 produces 1500.4551
2000.37408 produces 2000.374
而在 C# 中:
1500.45504 produces 1500.455
2000.37408 produces 2000.374
我是否在 C# 中缺少标志或其他东西来复制 Java 的行为?我只能使用浮点数,因此在这种情况下使用更精确的浮点数(如双精度)是不可行的。此外,我不能使用 或说明符,因为输出会根据输出是否需要唯一的数字标识符而有所不同。G<num>
N<num>
答:
如果你绝对需要匹配的结果,我建议你不要依赖语言的便利方法。它们是两种不同的语言,可以按照他们认为合适的方式行事。C#内置了任何功能,可以执行Java的Float.toString(float)的功能。
如果您必须在 C# 中复制 Java 行为,我建议获取该 Java 方法的源代码(下面是一个示例:https://developer.classpath.org/doc/java/lang/Float-source.html),然后根据该源代码自己编写 C# 版本。
如果你可以选择不使用 Java 的 Float.toString(),你可以用每种语言编写自己的低级代码,这样你就可以保证两种语言之间的结果是等价的,从而让自己的生活更轻松。
在您的情况下,您只需使用字符串格式即可轻松完成此操作。在 Java 中,您可以使用具有指定精度的 String.format() 或 DecimalFormat 类(参见:如何在 Java 中打印具有 2 位小数位的浮点数?
在 C# 方面,您可以使用 ToString()(请参阅:Float to String 格式说明符)。
只是对任何四舍五入都非常小心。也许格式化到很多小数位,然后截断一点或其他东西。之后,您可以比较生成的字符串。
上一个:Java Float 最大精确值
下一个:Java 浮点格式化和舍入
评论