【发布时间】:2019-07-14 18:32:18
【问题描述】:
我有一个 C/C++ 应用程序,可以将数值作为字符串写入 redis。我还有一个 Java 应用程序可以从 redis 中读取这些值。有时出于正当理由,我们最终会得到一个值为NaN 或-NaN 的浮点值。但是,使用sprintf(charPtr, "%e", dblVal); 时,值将输出为nan。我还用%E 尝试了相同的语句,结果是NAN。当 Java 尝试通过 Float.parseFloat() 或 Double.parseDouble 解析时,它会抛出 NumberFormatException。
此应用程序已从 Solaris 移植到 Linux,随后经历了一些 Linux 升级,在某些时候“NaN”变成了“nan”。我不能确定最终是什么升级引入了这种行为。
我已经使用 cmath 的 std::isfinite() 和 std::isnan() 进行了练习,最终可以定义我自己的有效 (-)NaN 或 (-)Infinity 字符串,但这似乎不需要我重新发明标准化的 NaN 和 Infinity字符串。 Infinity 可能有点不同,因为 C 端输出 inf 而 Java 想要 Infinity。
最终我需要能够解码由 Java 中的 C++ 应用程序编写的数据。 nan 和 inf 不能被 Java 解码。我的重点是 NaN,但 Infinity 是一个应该涵盖的案例。
【问题讨论】:
-
有趣的 NaN 信息,但问题/目标是什么?