Как преобразовать string в float c
Здравствуйте, уважаемые программисты. У меня проект в VS2005. При использовании стандартной atof весьма и весьма глючит (подозреваю из-за ввода либо точки, либо запятой, разделяющих десятичную часть, но нет точной уверенности).
Это считывается с диалогового окна
case IDOK: HWND hEdit = GetDlgItem(hWnd, IDC_EDIT1); char temp[200]; GetWindowText(hEdit, temp, 200); percentage = atof(temp); EndDialog( hWnd,0 ); break;>
Помогите пожалуйста
Регистрация: 06.08.2009
Сообщений: 2,992
Ну так и проверил бы с запятой для начала. 🙂 Должна быть точка.
А как именно глючит?
Регистрация: 09.11.2009
Сообщений: 4
желательно бы универсальнее ее сделать.
Ввожу 0,01 — она переменную по-видимому, обнуляет полностью.
Конечно, при 0.01 нет, но ведь люди могут ввести и так, и так, тем более, запятая эта — на цифровой клавиатуре находится.
А еще не подскажете, как с помощью messagebox вывести эту действительную переменную, чтоб убедиться в рзультате?
в С++ намного сложнее с этими действит. числами, нежели в delphi.
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,336
2Brigitta
естественно, чтобы преобразовать строку во float переменную, строка должна быть в правильном формате! что мешает проверить и заменить, если требуется, запятую на точку? А еще люди туда могут и буквы ввести, и ты опять будешь грешить на atof?
| А еще не подскажете, как с помощью messagebox вывести эту действительную переменную, чтоб убедиться в рзультате? |
float f = 100.5; char str[64]; sprintf(str, "%f", f); MessageBox(GetActiveWindow(), str, 0, 0);
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr.
Q: Whats the object-oriented way to become wealthy?
A: Inheritance
Как преобразовать string в float c
Преобразование типов данных, это приведение одного типа к другому. Например, приведение целочисленной переменной к числу с плавающей точной, или преобразование числа в строку. В C# выделяют два варианта преобразования типов:
- Неявное преобразование типов. Это, так называемое безопасное преобразование типов в C#. Например, преобразование из типа float (более «маленький» тип) в тип double (более «большой» тип). При таком преобразовании никакая информация не «потеряется», что при обратном преобразовании вполне возможно.
- Явное преобразование типов. Такое преобразование выполняется программистом с прямым указанием типа, к которому нужно привести переменную. Для такого преобразования требуется наличие оператора преобразования.
А теперь, я покажу как можно использовать явное преобразование типов в C#:
using System; namespace TypesConvertion < class Program < static void Main(string[] args) < //Число с плавающей точкой double doubleData = 245.45; //Вывод этого числа Console.WriteLine(doubleData); //А теперь, мы сделаем на основе этого числа, цело число int intData = (int)doubleData; //Вывод целого числа Console.WriteLine(intData); //Чтобы окно не закрылось раньше времени Console.ReadKey(); >> >
Преобразование типа double в тип int выполнялось в выделенной строке (строке с номером 16). Если вы соберете данный пример и запустите его, то увидите, что преобразование типов прошло, т.е. из числа с плавающей точкой мы получили целое число.
Так же, для преобразования данных из одного типа в другой, есть целый класс с именем Convert, у которого имеются специальные методы. Ниже, в таблице, представлены основные методы этого класса.
| Название метода | Целевой тип |
|---|---|
| ToBoolean | bool |
| ToByte | byte |
| ToChar | char |
| ToDouble | double |
| ToSingle | float |
| ToInt32 | int |
| ToInt64 | long |
| ToString | string |
А теперь, пример использования класса Convert и его методов:
using System; namespace TypesConvertion < class Program < static void Main(string[] args) < //Число с плавающей точкой double doubleData = 245.45; //Вывод этого числа Console.WriteLine(doubleData); //А теперь, мы сделаем на основе этого числа, цело число int intData = Convert.ToInt32(doubleData); //Вывод целого числа Console.WriteLine(intData); //Чтобы окно не закрылось раньше времени Console.ReadKey(); >> >
Как видите, это практически тот же код, что был в первом примере, но с использованием другого подхода в преобразовании типов.
И обратите внимание на еще одни момент, если один тип нельзя преобразовать в другой, а вы это попытаетесь сделать, то получите ошибку в программе!
Пользоваться возможность преобразования типов вам придется довольно часто!
Преобразование float в std::string в C++
У меня есть значение float, которое нужно поместить в std::string . Как мне преобразовать из float в string?
float val = 2.5; std::string my_val = val; // error here
Поделиться Источник 24 января 2010 в 03:59
8 ответов
Начиная с C++11, стандартная библиотека C++ предоставляет функцию std::to_string(arg) с различными поддерживаемыми типами для arg .
Поделиться 18 июня 2013 в 19:22
Если вы не беспокоитесь о производительности, используйте строковые потоки:
#include //.. std::ostringstream ss; ss
Если вы не против Boost, lexical_cast<> является удобной альтернативой:
std::string s = boost::lexical_cast(myFloat);
Эффективными альтернативами являются, например, FastFormat или просто функции в стиле C.
Поделиться 24 января 2010 в 04:01
Important: Прочтите примечание в конце. Быстрый ответ: Используйте to_string() (доступный с C++11) пример:
#include #include using namespace std; int main ()
Запустите его самостоятельно: http://ideone.com/7ejfaU Также доступны:
string to_string (int val); string to_string (long val); string to_string (long long val); string to_string (unsigned val); string to_string (unsigned long val); string to_string (unsigned long long val); string to_string (float val); string to_string (double val); string to_string (long double val);
Важное примечание: Как справедливо указал @Michael Konečný, использование to_string() в лучшем случае рискованно, поэтому оно, скорее всего, вызовет неожиданные результаты. Из http://en.cppreference.com/w/cpp/string/basic_string/to_string:
С типами с плавающей точкой std::to_string может получать неожиданные результаты, так как количество значимых цифр в возвращаемой строке может быть равным нулю, см. пример. Возвращаемое значение может значительно отличаться от того, что std::cout печатает по умолчанию, см. пример. std::to_string полагается на текущую локаль для целей форматирования, и поэтому одновременные вызовы std::to_string из нескольких потоков могут привести к частичной сериализации вызовов. C++17 предоставляет std::to_chars как более эффективную альтернативу, независимую от локали.
Лучший способ - использовать stringstream , как показано в его ответе, например, @dcp: Эта проблема демонстрируется в следующем примере: запустите пример самостоятельно: https://www.jdoodle.com/embed/v0/T4k
#include #include #include template < typename Type >std::string to_str (const Type & t) < std::ostringstream os; os int main () < // More information: https://en.cppreference.com/w/cpp/string/basic_string/to_string double f = 23.43; double f2 = 1e-9; double f3 = 1e40; double f4 = 1e-40; double f5 = 123456789; std::string f_str = std::to_string (f); std::string f_str2 = std::to_string (f2); // Note: returns "0.000000" std::string f_str3 = std::to_string (f3); // Note: Does not return "1e+40". std::string f_str4 = std::to_string (f4); // Note: returns "0.000000" std::string f_str5 = std::to_string (f5); std::cout
std::cout: 23.43 to_string: 23.430000 ostringstream: 23.43 std::cout: 1e-09 to_string: 0.000000 ostringstream: 1e-09 std::cout: 1e+40 to_string: 10000000000000000303786028427003666890752.000000 ostringstream: 1e+40 std::cout: 1e-40 to_string: 0.000000 ostringstream: 1e-40 std::cout: 1.23457e+08 to_string: 123456789.000000 ostringstream: 1.23457e+08
Поделиться 11 февраля 2016 в 16:56
Вы можете определить шаблон, который будет работать не только с дублями, но и с другими типами.
template string tostr(const T& t)
Затем вы можете использовать его для других типов.
double x = 14.4; int y = 21; string sx = tostr(x); string sy = tostr(y);
Как преобразовать строку в число с плавающей запятой в Python
В Python есть различные функции преобразования типов, которые напрямую меняют один тип данных на другой. В этой статье мы расскажем о том, как преобразовать строку в число с плавающей запятой.
Зачем вообще може понадобиться такое преобразование? В Python, когда входные данные получаются в результате чтения или записи файла или выполнения какой-либо другой операции с файлом, ввод мы получаем в виде строковой переменной. Даже если мы запрашивали число с плавающей запятой, метод input() получает входные данные в виде строки. Поэтому для дальнейшей работы с нужными нам числами придется сначала привести string к float.
Использование метода float()
Чтобы преобразовать строку в число с плавающей запятой, в Python используется функция float(). Эта функция принимает только один параметр — строку или целое число. Если аргументы не переданы, метод возвращает 0.0 .
Если входная строка имеет аргументы за пределами диапазона чисел с плавающей запятой, вы получите ошибку OverflowError .
Для реализации следующих скриптов на Python установите сам Python, а также подходящую IDE (Pycharm, Jupiter, Spyder и т.д.). Создайте новый файл, вставьте туда код и запустите его.
string = '3.4567' number = float(string) print('Float Value is', number) # Output: # Float Value is 3.4567
В данном примере мы берем строку «3.4576» . Мы конвертируем ее, передавая в функцию float(). Дальше строка преобразуется в число с плавающей запятой и возвращается нам.
Как преобразовать строку в число с плавающей запятой, если в строке есть лишние запятые
В следующем примере мы работаем со строкой «3,2.759» . В данной строке есть число, разделенное запятой и точкой.
Важно отметить, что в Python десятичная часть отделяется с помощью точки. И в данном случае запятая – это просто лишний символ, который добавляет нам трудностей при переводе числа из строкового типа в вещественный.
Преобразовать такую строку в число с плавающей запятой сложнее. Вызов функции float() напрямую приведет нас к ошибке. Поэтому, прежде чем вызвать функцию float(), нам нужно избавиться от лишней запятой в строке.
Запятую мы удалим из строки с помощью функции replace(), заменив ее на пустую строку.
string = '3,2.759' number = float(string.replace(',', '')) print('Float Value is', number) # Output: # Float Value is 32.759
После удаления запятой из строки значение нашей строки будет «32.759» . Далее мы можем применить метод float(), чтобы получить число вещественного типа.
Преобразование списка строк
Допустим, у нас есть список, содержащий числа в строковом формате. Чтобы преобразовать все эти элементы в числа с плавающей запятой, мы перебираем список в цикле for . Каждый элемент мы преобразуем из строкового в вещественный. Делается это при помощи функции float().
str = ['12.23', '45.78', '69.34', '38.65'] number = [] for item in str: number.append(float(item)) print(number) # Output: # [12.23, 45.78, 69.34, 38.65]
В данном примере у нас есть список ['12.23', '45.78', '69.34', '38.65'] . Мы создаем пустой список number , куда добавим наши числа в формате float. Далее мы используем цикл for для добавления каждого элемента из исходного списка в список number . При этом перед добавлением мы передаем в функцию float() каждый элемент, чтобы преобразовать его из строки в число с плавающей запятой.
В итоге мы получим новый список number , состоящий из исходных элементов, но только теперь это уже не строки, а числа с плавающей запятой.
Задание определенной точности
Иногда нам нужно указать количество знаков после запятой в числе. В такой ситуации мы используем все ту же функцию float(), а после нее — функцию format(), чтобы определить количество десятичных знаков в нашем числе.
В данном примере мы работаем со строкой «6.759104» . Нам нужно преобразовать эту строку в число с плавающей запятой и оставить только 4 цифры после запятой.
str = '6.759104' number = float(str) result = ''.format(number) print(result) # Output: # 6.7591
Здесь метод format() используется для определения количества десятичных знаков в числе с плавающей запятой. В данном случае в исходном числе после запятой больше знаков, чем четыре, поэтому происходит округление. Однако если бы вдруг знаков оказалось меньше, то в конец просто бы добавились нули.
Таким образом, после применения функции format() мы получим 6.7591 .
Заключение
В Python бывают такие случаи, когда для выполнения требуемой операции необходимо заменить один тип данных на другой. Метод input() в Python возвращает нам объект типа string, поэтому для выполнения различных операций с пользовательскими данными необходимо приводить полученные строки к нужному типу. В этой статье мы рассмотрели приведение строк к типу float.
Важно отметить, что для приведения к типу float с помощью функции float() строка должна иметь значение с точкой. То есть преобразовать буквы в число с плавающей запятой не получится. Если попытаетесь, получите ValueError . Если элемент находится за пределами диапазона плавающей переменной, в выводе отображается ошибка OverflowError . Если функции float() не передан аргумент, возвращается 0.0 .
Надеемся, данная статья была для вас полезна. Успехов в написании кода!