Преобразование в число с плавающей точкой

1

У меня два целых числа. Целые числа: 2206,41247

Я хочу преобразовать для float этих целых чисел. Для этого;

void Main()
{
    GetSingle(2206,41247).Dump();
}
public static float GetSingle(ushort highOrderValue, ushort lowOrderValue)
{
    return BitConverter.ToSingle(BitConverter.GetBytes(lowOrderValue).Concat(BitConverter.GetBytes(highOrderValue)).ToArray(), 0);
}

Я закодировал что-то в Linqpad. Результатом этих функций является 9,547158E-34

Но в программе Modbus Poll программа преобразует 0 этих целых чисел.

Я читаю эти целые числа с удаленного устройства с протоколом Modbus. Правильное значение равно 0

Мой вопрос; Как программа опроса Modbus преобразует эти целые числа в float? Как значение может быть равно нулю?

Есть идеи?

  • 0
    Нет никакого способа, чтобы байты из этих двух целых чисел представляли бы 0, если бы они были байтами из числа с плавающей точкой. Нулевое значение с плавающей точкой состоит из байтов, которые равны 0. Например, попробуйте Console.WriteLine(string.Join(", ", BitConverter.GetBytes((float)0)));
  • 0
    Да ты прав. Все двоичные числа должны быть нулями в плавающем числе для нуля. Но как это может произойти? В Modbus Poll конвертирует эти целые числа в ноль.
Показать ещё 1 комментарий
Теги:
floating-point
modbus
bitconverter
ushort

1 ответ

2
Лучший ответ

Я пришел к тому же номеру. Помните, что 9,547158E-34 действительно крошечный - может быть, его просто бросают в int после, yeilding 0?

  • 0
    Да, я думаю, Math.Round - мой ответ. Спасибо чувак.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню