Преобразование текстового поля Xaml в удвоение, но как проверить, что пользовательский ввод double, а не строка в c ++ для приложения Windows 8

Это то, что у меня есть для моего текстового поля в xaml.

<TextBox x:Name="number1" HorizontalAlignment="Left" Height="85" Margin="115,239,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="328" FontSize="60" TextAlignment="Center"/>

Это то, что я должен получить текст из текстового поля:

void Simple_Calculator_4_Kids::MainPage::add_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
String^ str1 = txtNumberToMultiply->Text;
wstring ws1( str1->Data());
wstringstream convertor;
double ws1_d;
convertor << ws1;
convertor >> ws1_d;
ws1_d = ws1_d + 2.2;
}

Я не понимаю, как добавить таким образом, чтобы проверить, что в текстовом поле на самом деле двойной, а не строка буквы или пусто.
Как бы я продолжил добавлять способ проверки того, что в текстовом поле, чтобы быть двойным? Это использование C ++ с использованием Visual Studio 2012 для приложения Windows 8.

0

Решение

Используйте strtod из библиотеки времени выполнения C (преобразовать строку в значение двойной точности). В соответствии с документацией проверьте ввод текста в соответствии с функцией и проверьте на наличие ошибок. strtod (и друзья) поддерживаются для приложений Магазина Windows через C ++ и CRT.

http://msdn.microsoft.com/en-us/library/kxsfc1ab(v=vs.110).aspx

0

Другие решения

Мне потребовалось некоторое время, чтобы понять, как wstring хранит свои данные, используя char16, поэтому я написал этот код. Он просто проверяет периоды и числа.

bool isValidInput(String^ str){
int decimalX = 0;
wstring ws(str->Data());
int strSize = ws.length();
if(strSize<1)
return false;
else{
for(int i=0;i<strSize;i++){
if(ws[i]==46||ws[i]==48||ws[i]==49||ws[i]==50||ws[i]==51||ws[i]==52||ws[i]==53||ws[i]==54||ws[i]==55||ws[i]==56||ws[i]==57){
if(ws[i]==46){
decimalX++;
if(decimalX>1)
return false;
}
}
else
return false;
}
return true;
}
}
0

По вопросам рекламы [email protected]