suplibxx  1.3.14
str2d.cc
1 // --8<--8<--8<--8<--
2 //
3 // Copyright (C) 2006 Smithsonian Astrophysical Observatory
4 //
5 // This file is part of suplibxx
6 //
7 // suplibxx is free software; you can redistribute it and/or
8 // modify it under the terms of the GNU General Public License
9 // as published by the Free Software Foundation; either version 2
10 // of the License, or (at your option) any later version.
11 //
12 // suplibxx is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 // GNU General Public License for more details.
16 //
17 // You should have received a copy of the GNU General Public License
18 // along with this program; if not, write to the
19 // Free Software Foundation, Inc.
20 // 51 Franklin Street, Fifth Floor
21 // Boston, MA 02110-1301, USA
22 //
23 // -->8-->8-->8-->8--
24 
25 #include <errno.h>
26 #include <cstdlib>
27 #include <string>
28 
29 #include <Exception/Exception.h>
30 
31 #include "str.h"
32 
45 double suplib::str2d( const char* txt ) {
46 
47  // Field is empty
48  if ( NULL == txt || '\0' == *txt )
49  throw Exception( "suplib::str2d( ) : Empty field" );
50 
51  char* ptr=NULL;
52 
53  double result = strtod( txt, &ptr );
54 
55  if ( ERANGE == errno )
56  throw Exception( "suplib::str2d( " + std::string( txt ) +
57  ") : Variable overflow" );
58 
59  if ( '\0' != *ptr )
60  throw Exception( "suplib::str2d( " + std::string( txt ) +
61  " ) Not a number, problem at `" + std::string( ptr ) + "'" );
62 
63  return result;
64 
65 }
double str2d(const char *txt)
convert string to double-precision number
Definition: str2d.cc:45