вы должны преобразовать из строк в удвоение?
Да.
если так. как?
Способ C ++ - использовать строковые потоки; в частности, вы, вероятно, захотите использовать <a href="http://www.cplusplus.com/reference/iostream/istringstream/" rel="nofollow noreferrer" title="istringstream - C++ Reference">istringstream</a>
. Жизнеспособная альтернатива - следовать по пути C, то есть использовать <a href="http://www.cplusplus.com/reference/clibrary/cstdio/sscanf/" rel="nofollow noreferrer" title="sscanf - C++ Reference">sscanf</a>
с соответствующим спецификатором формата ("% f").
Другой вариант C ++ - использовать повышение <a href="http://www.boost.org/doc/libs/1_43_0/libs/conversion/lexical_cast.htm" rel="nofollow noreferrer" title="lexical_cast">lexical_cast</a>
, но начинать использовать повышение только для lexical_cast
, на мой взгляд, немного излишне.
Пример с istringstream
:
#include <sstream>
// ...
std::istringstream strParser(yourString);
double yourDouble;
strParser>>yourDouble;
if(strParser.fail())
{
// the string couldn't be converted to a double
}
else if(!strParser.eof())
{
// the string hasn't been fully consumed; this may or may not be a problem, depending on your needs
}
Существуют ли функции для trig, которые будут принимать строковые данные текстового поля как есть?
AFAIK нет, они не нужны (хотя вы можете написать их довольно легко).
Есть ли способ извлечь данные из текстового поля в виде числового значения, а не в виде строки?
WinAPI предоставляют несколько таких «вспомогательных функций» для использования в диалогах, но я могу вспомнить только одну, которая предоставляет такую помощь: <a href="http://msdn.microsoft.com/en-us/library/ms645485%28VS.85%29.aspx" rel="nofollow noreferrer" title="GetDlgItemInt Function (Windows)">GetDlgItemInt</a>
, которая, как следует из названия, работает только для целых чисел.
Добавление
Теперь я вижу, что вы используете C ++ / CLI (вы упомянули System :: String): ну, вы должны были сказать, что это немного меняет параметры.
В управляемом мире ваш лучший вариант - использовать метод <a href="http://msdn.microsoft.com/en-en/library/fd84bdyt.aspx" rel="nofollow noreferrer" title="Double.Parse Method (String)">Double::Parse</a>
; для перехвата плохо отформатированных строк вы должны либо перехватить исключения, выданные Double::Parse
, либо вызвать <a href="http://msdn.microsoft.com/en-us/library/994c0zb1.aspx" rel="nofollow noreferrer" title="Double.TryParse Method (String, Double %)">Double::TryParse</a>
перед вызовом Double::Parse
.
Добавление бис
Ох, я забыл, поскольку вы используете .NET Framework, вероятно, лучше использовать тригонометрические функции .NET (класс <a href="http://msdn.microsoft.com/en-us/library/system.math.aspx" rel="nofollow noreferrer" title="Math Class (System)">System.Math</a>
).