38{
39 double value = 0;
40
41
42 const struct lconv* lc = localeconv();
43 wxChar decimal_point = lc->decimal_point[0];
44 wxString buf( TextValue.Strip( wxString::both ) );
45
46
47 buf.Replace( wxT( "." ), wxString( decimal_point, 1 ) );
48
49
50 buf.Replace( wxT( "," ), wxString( decimal_point, 1 ) );
51
52
53
54
55 unsigned brk_point = 0;
56 while( brk_point < buf.Len() )
57 {
58 wxChar ch = buf[brk_point];
59 if( !( ( ch >= '0' && ch <= '9' ) || ( ch == decimal_point ) || ( ch == '-' )
60 || ( ch == '+' ) || ( ch == 'e' ) || ( ch == 'E' ) ) )
61 {
62 break;
63 }
64 ++brk_point;
65 }
66
67
68 if( brk_point == 0 )
69 return std::nan( "" );
70
71
72 if( !buf.Left( brk_point ).ToDouble( &value ) )
73 return std::nan( "" );
74
75 return value;
76}