str2num

stdlib_str2num 模块

该模块为字符串到数字的转换提供了一种函数风格的接口。它还利用 Fortran 的接口来实现精度相关的算法,以最大限度地提高运行时效率。

to_num - 将字符串转换为数字

状态

实验性

描述

将字符串或字符串数组转换为数值类型。

语法

number = to_num (string, mold)

参数

string: 参数具有 intent(in) 并且类型为 character(*)

mold: 参数具有 intent(in) 并且是数值类型(即 integerreal)。**注意**:mold 参数的类型决定了结果的类型。

返回值

返回数值类型的标量(即 integerreal)。

示例

program example_string_to_number
    use stdlib_kinds, only: dp
    use stdlib_str2num, only: to_num
    implicit none
    character(:), allocatable :: txt
    real(dp) :: x

    txt = ' 8.8541878128e−12 '
    x = to_num( txt , x )
  end program example_string_to_number

to_num_from_stream - 将字符串中的值流转换为数字

状态

实验性

描述

将字符串中的值流转换为值数组。

语法

number = to_num_from_stream (string, mold)

参数

string: 参数具有 intent(in) 并且类型为 character(:), pointer

mold: 参数具有 intent(in) 并且是数值类型(目前为 integerreal)。**注意**:mold 参数的类型决定了结果的类型。

返回值

返回数值类型的标量(即 integerreal)。

示例

program example_stream_of_strings_to_numbers
    use stdlib_kinds, only: dp
    use stdlib_str2num, only: to_num_from_stream
    implicit none
    character(:), allocatable, target :: chain
    character(len=:), pointer :: cptr
    real(dp), allocatable :: r(:), p(:)
    integer :: i 

    chain = " 1.234   1.E1 1e0     0.1234E0  12.21e+001 -34.5E1"
    allocate( r(6), p(6) )
    !> Example for streamline conversion using `to_num_from_stream`
    cptr => chain
    do i =1, 6
        r(i) = to_num_from_stream( cptr , r(i) ) !> the pointer is shifted within the function
    end do
    read(chain,*) p
    print *, "Reading with to_num_from_stream"
    print *, r
    print *, "Reading with formatted read"
    print *, p

end program example_stream_of_strings_to_numbers

注意

转换的精度取决于实现;建议实现者保证精度达到最后 3 位。

当前实现经过测试,可提供以下精度: :

sp : 精确匹配

dp : 精度达到 epsilon(0.0_dp)

qp : 精度约为 200*epsilon(0.0_qp)

其中,精度指的是 to_numread 之间的相对差异。另一方面,与内在的 read 相比,to_num 的速度提高了 4 倍到 10 倍以上。