Convert a real value to a string.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=RK), | intent(in) | :: | rval |
real value. |
||
character(kind=CDK, len=*), | intent(in) | :: | real_fmt |
format for real numbers |
||
logical(kind=LK), | intent(in) | :: | compact_real |
compact the string so that it is displayed with fewer characters |
||
logical(kind=LK), | intent(in) | :: | non_normals_to_null |
If True, NaN, Infinity, or -Infinity are returned as |
||
character(kind=CK, len=*), | intent(out) | :: | str |
|
subroutine real_to_string(rval,real_fmt,compact_real,non_normals_to_null,str) implicit none real(RK),intent(in) :: rval !! real value. character(kind=CDK,len=*),intent(in) :: real_fmt !! format for real numbers logical(LK),intent(in) :: compact_real !! compact the string so that it is !! displayed with fewer characters logical(LK),intent(in) :: non_normals_to_null !! If True, NaN, Infinity, or -Infinity are returned as `null`. !! If False, the string value will be returned in quotes !! (e.g., "NaN", "Infinity", or "-Infinity" ) character(kind=CK,len=*),intent(out) :: str !! `rval` converted to a string. integer(IK) :: istat !! write `iostat` flag if (ieee_is_finite(rval) .and. .not. ieee_is_nan(rval)) then ! normal real numbers if (real_fmt==star) then write(str,fmt=*,iostat=istat) rval else write(str,fmt=real_fmt,iostat=istat) rval end if if (istat==0) then !in this case, the default string will be compacted, ! so that the same value is displayed with fewer characters. if (compact_real) call compact_real_string(str) else str = repeat(star,len(str)) ! error end if else ! special cases for NaN, Infinity, and -Infinity if (non_normals_to_null) then ! return it as a JSON null value str = null_str else ! Let the compiler do the real to string conversion ! like before, but put the result in quotes so it ! gets printed as a string write(str,fmt=*,iostat=istat) rval if (istat==0) then str = quotation_mark//trim(adjustl(str))//quotation_mark else str = repeat(star,len(str)) ! error end if end if end if end subroutine real_to_string