У меня есть приложение на 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's std::isfinite()
и std::isnan()
, и в конечном итоге могу определить свой собственный действительный (-)NaN
или (-)Infinity
строки, но это не похоже, что мне нужно заново изобретать нормализованные строки NaN и Infinity.Бесконечность может немного отличаться, так как сторона C выводит inf
, но Java хочет Infinity
.
В конечном итоге мне нужно иметь возможность декодировать данные, написанные приложением C ++ в Java.Nan и Inf не могут быть декодированы Java как написано.Я сфокусировался на NaN, но Infinity - это тот случай, который должен быть раскрыт.