2014-10-14 2 views
1

У меня есть два целых числа. Целые числа: 2206,41247Преобразование в плавучую точку

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

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 программа преобразует это целые числа.

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

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

Любая идея?

+0

Невозможно, чтобы байты из этих двух целых чисел представляли 0, если они были байтами из поплавка. Ноль-поплавок состоит из байтов, которые все равны 0. Например. попробуйте 'Console.WriteLine (string.Join (", ", BitConverter.GetBytes ((float) 0)));' –

+0

Да, вы правы. Все двоичные файлы должны быть равны нулю в плавающем числе для нуля. Но как это может произойти? В опросе Modbus конвертирует эти целые числа в нуль. – Stormcloak

+0

Это очень маленький, я думаю, что modbus должен округлять. Если модовая шина показывает до 5, даже 30 десятичных знаков, это будет отображаться как ноль. – weston

ответ

2

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

+0

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