fstr2num method

bool fstr2num(
  1. MPData n,
  2. String _s
)

Implementation

bool fstr2num( MPData n, String _s ){
	MPData s = _d2cstr( _s );

	int l = _strlen( s );
	int i, j = 0;
	int p = 0;
	bool m = false;
	MPData ss = MPData();
	for( i = 0; i < l; i++ ){
		if( (s.val(i) == ClipMath.char( 'e' )) || (s.val(i) == ClipMath.char( 'E' )) ){
			if( p != 0 ){
				p -= l - i;
			}
			i++;
			if( s.val(i) == ClipMath.char( '-' ) ){
				m = true;
				i++;
			} else {
				m = false;
				if( s.val(i) == ClipMath.char( '+' ) ){
					i++;
				}
			}
			break;
		} else if( s.val(i) == ClipMath.char( '.' ) ){
			p = l - (i + 1);
		} else {
			ss.set( j++, s.val(i) );
		}
	}
	ss.set( j, 0 ); // 文字列終端を書き込む
	if( !_str2num( n, ss ) ){
		return false;
	}

	int e = 0;
	for( ; i < l; i++ ){
		if( s.val(i) >= ClipMath.charCode0 && s.val(i) <= ClipMath.charCode9 ){
			e = e * 10 + (s.val(i) - ClipMath.charCode0);
		} else {
			return false;
		}
	}
	if( m ){
		p += e; e = 0;
	} else if( p >= e ){
		p -= e; e = 0;
	} else {
		e -= p; p = 0;
	}

	_setPrec( n, p );

	if( e > 0 ){
		MPData k = MPData();
		_fcoef( k, e );
		fmul( n, n, k, p );
	}

	return true;
}