Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- !-----------------------------------------------------------------------
- !Module int2char_module
- !-----------------------------------------------------------------------
- module int2char_module
- !use
- implicit none
- private ! all by default
- public :: int2char, isp,rsp,idp,rdp,iqp,rqp
- integer, parameter :: isp = selected_int_kind(9)
- integer, parameter :: idp = selected_int_kind(18)
- integer, parameter :: iqp = selected_int_kind(36)
- integer, parameter :: rsp = kind(1.0)
- integer, parameter :: rdp = selected_real_kind(2*precision(1.0_rsp))
- integer, parameter :: rqp = selected_real_kind(2*precision(1.0_rdp))
- interface int2char
- module procedure int2char4, int2char8, int2char16
- end interface int2char
- contains
- pure function csize4(i) result (sz)
- implicit none
- integer(isp), intent (in) :: i
- integer(isp) :: sz
- if(i==0) then
- sz=1
- else if(i<0) then
- sz = floor(log10(real(abs(i),kind=rsp))) + 1 + 1 ! additional 1 for minus sign
- else
- sz = floor(log10(real(i,kind=rsp))) + 1
- endif
- end function csize4
- pure function csize8(i) result (sz)
- implicit none
- integer(idp), intent (in) :: i
- integer(idp) :: sz
- if(i==0_idp) then
- sz=1_idp
- else if(i<0_idp) then
- sz = floor(log10(real(abs(i),kind=rdp))) + 1_idp + 1_idp ! additional 1 for minus sign
- else
- sz = floor(log10(real(i,kind=rdp))) + 1_idp
- endif
- end function csize8
- pure function csize16(i) result (sz)
- implicit none
- integer(iqp), intent (in) :: i
- integer(iqp) :: sz
- if(i==0_iqp) then
- sz=1_iqp
- else if(i<0_iqp) then
- sz = floor(log10(real(abs(i),kind=rqp))) + 1 + 1 ! additional 1 for minus sign
- else
- sz = floor(log10(real(i,kind=rqp))) + 1
- endif
- end function csize16
- !-----------------------------------------------------------------------
- !Function integer to character
- !-----------------------------------------------------------------------
- function int2char4(i) result (c)
- implicit none
- integer(isp), intent (in) :: i
- character (len=csize4(i)) :: c
- if(i<0) then
- write (c,'(A,i0)') "-",abs(i)
- else
- write (c,'(i0)') i
- end if
- end function int2char4
- !-----------------------------------------------------------------------
- !Function integer to character
- !-----------------------------------------------------------------------
- function int2char8(i) result (c)
- implicit none
- integer(idp), intent (in) :: i
- character (len=csize8(i)) :: c
- if(i<0) then
- write (c,'(A,i0)') "-",abs(i)
- else
- write (c,'(i0)') i
- end if
- end function int2char8
- !-----------------------------------------------------------------------
- !Function integer to character
- !-----------------------------------------------------------------------
- function int2char16(i) result (c)
- implicit none
- integer(iqp), intent (in) :: i
- character (len=csize16(i)) :: c
- if(i<0) then
- write (c,'(A,i0)') "-",abs(i)
- else
- write (c,'(i0)') i
- end if
- end function int2char16
- end module int2char_module
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement