[UP]


Manual Reference Pages  - s2v (3)

NAME

s2v(3f) - [M_strings:NUMERIC] function returns doubleprecision numeric value from a string (LICENSE:PD)

CONTENTS

Synopsis
Description
Options
Returns
Example
Author
License

SYNOPSIS

function s2v(string[,ierr][,onerr])

character(len=*) :: string doubleprecision :: s2v integer,intent(out),optional :: ierr class(*),intent(in),optional :: onerr

DESCRIPTION

This function converts a string to a DOUBLEPRECISION numeric value.

The intrinsics INT(3f), REAL(3f), and DBLE(3f) are also extended to take CHARACTER variables. The KIND= keyword is not supported on the extensions.

OPTIONS

string holds string assumed to represent a numeric value
ierr If an error occurs the program is stopped if the optional parameter IERR is not present. If IERR returns a non-zero value an error occurred.
onerr The value to return on error. A value of NaN is returned on error by default.

RETURNS

s2v

EXAMPLE

Sample Program:

   program demo_s2v

use M_strings, only: s2v, int, real, dble implicit none character(len=8) :: s=’ 10.345 ’ integer :: i character(len=14),allocatable :: strings(:) doubleprecision :: dv integer :: errnum

! different strings representing INTEGER, REAL, and DOUBLEPRECISION strings=[& &’ 10.345 ’,& &’+10 ’,& &’ -3 ’,& &’ -4.94e-2 ’,& &’0.1 ’,& &’12345.678910d0’,& &’ ’,& ! Note: will return zero without an error message &’1 2 1 2 1 . 0 ’,& ! Note: spaces will be ignored &’WHAT? ’] ! Note: error messages will appear, zero returned

! a numeric value is returned, so it can be used in numeric expression write(*,*) ’1/2 value of string is ’,s2v(s)/2.0d0 write(*,*) write(*,*)’ STRING VALUE ERROR_NUMBER’ do i=1,size(strings) ! Note: not a good idea to use s2v(3f) in a WRITE(3f) statement, ! as it does I/O when errors occur, so called on a separate line dv=s2v(strings(i),errnum) write(*,*) strings(i)//’=’,dv,errnum enddo write(*,*)"Extended intrinsics" write(*,*)’given inputs:’,s,strings(:8) write(*,*)’INT(3f):’,int(s),int(strings(:8)) write(*,*)’REAL(3f):’,real(s),real(strings(:8)) write(*,*)’DBLE(3f):’,dble(s),dble(strings(:8)) write(*,*)"That’s all folks!"

end program demo_s2v

Expected output

    >1/2 value of string is    5.1725000000000003
    >
    > STRING            VALUE                    ERROR_NUMBER
    > 10.345       =   10.345000000000001                0
    >+10           =   10.000000000000000                0
    >    -3        =  -3.0000000000000000                0
    >    -4.94e-2  =  -4.9399999999999999E-002           0
    >0.1           =  0.10000000000000001                0
    >12345.678910d0=   12345.678910000001                0
    >              =   0.0000000000000000                0
    >1 2 1 2 1 . 0 =   12121.000000000000                0
    >*a2d* - cannot produce number from string [WHAT?]
    >*a2d* - [Bad value during floating point read]
    >WHAT?         =   0.0000000000000000             5010
    >Extended intrinsics
    >given inputs: 10.345 10.345 +10 -3 -4.94e-2 0.1 12345.678910d0 1 2 1 2 1 . 0
    >INT(3f): 10 10 10 -3 0 0 12345 0 12121
    >REAL(3f): 10.3450003 10.3450003 10.0000000 -3.00000000 -4.94000018E-02
    >          0.100000001 12345.6787 0.00000000 12121.0000
    >DBLE(3f): 10.345000000000001 10.345000000000001 10.000000000000000
    >          -3.0000000000000000 -4.9399999999999999E-002 0.10000000000000001
    >          12345.678910000001 0.0000000000000000 12121.000000000000
    >That’s all folks!

AUTHOR

John S. Urban

LICENSE

Public Domain


s2v (3) July 05, 2020
Generated by manServer 1.08 from 7120f9fb-893c-442a-8c6b-7390a0792313 using man macros.