Я пишу приложение Windows Form для общения с ПЛК. Мне нужно иметь возможность передавать значения с плавающей запятой между приложением и ПЛК. У меня возникла проблема при преобразовании значений int в числа с плавающей запятой.
Значение для отправки в ПЛК: 3334688901 Значение после одиночного преобразования: 3.334689E+09 Если вы преобразуете это в строку, вы получите: 3334689024
вот мой код: строка sValue = "3334688901"; float OutputValue = Convert.ToSingle(sValue);
Есть ли способ заставить Convert.ToSingle правильно преобразовать значение?
Я пробовал много вещей, которые не работали.
Значения с плавающей запятой имеют ограниченную точность. Single не может обрабатывать столько значащих цифр. Двойной мог.





Одиночное значение имеет до 7 десятичных цифр точности и максимум 9 цифр внутри. Число, которое вы конвертируете, состоит из 10 цифр. Попробуйте Convert.ToDouble вместо Convert.ToSingle.
Double OutputValue = Convert.ToDouble("3334688901");
Console.WriteLine(OutputValue);
Кстати, мой дядя программирует на ПЛК, и его компания дробит камень в огромном каменоломне. Использование таких больших чисел навело меня на мысль, что вы, возможно, делаете что-то, что превращает вещи в порошок.
это имеет смысл, но значение должно быть значением с плавающей запятой. Я использую пользовательскую DLL для связи с ПЛК, и вы должны присвоить переменной значение с плавающей запятой.
Если потребитель использует только точность с плавающей запятой, то не имеет значения, отправляете ли вы 3334688901 или 3334689024, потому что потребитель не может их различить.
Я понял. Пользовательская DLL имеет специальное свойство для присвоения значения, когда оно такое большое. Спасибо за вашу помощь
Похоже, что Microsoft документирует 10 версий .NET и .NET Core. Они пытаются перевести все на .NET Core, чтобы быть совместимым со «ВСЕМ». Во всяком случае, эти типы проблем задокументированы здесь. Выберите версию .NET и интересующий класс (например, System.Single в вашем случае). learn.microsoft.com/en-us/dotnet/api/system.single?view=net-7.0
Вы дробите камни в камни? А потом пудрить?