将字符串变量转换为 double 的 Haskell 程序

haskellserver side programmingprogramming更新于 2025/5/26 16:52:17

在 Haskell 中,我们将使用用户定义函数 stringToDouble 以及 read 注释、readMaybe 和 double 函数将字符串类型变量转换为 double。在第一个示例中,我们将使用 (let value = read input :: Double),在第二个示例中,我们将使用 (stringToDouble s = readMaybe s)。在第三个示例中,我们将使用 (stringToDouble s = case double $ pack s of)。

算法

  • 步骤 1 - 程序执行将从 main 函数开始。main() 函数完全控制程序。它写为 main = do。

  • 步骤 2 - 正在初始化名为"input"的变量。它将保存要转换为相应双精度值的字符串值。

  • 步骤 3 - 为双精度值调用读取注释。

  • 步骤 4 - 使用"putStrLn"语句将结果双精度值打印到控制台。

示例 1

在此示例中,读取输入后的 :: Double 是一个类型注释,它告诉 Haskell 我们要将输入字符串转换为双精度值。然后使用 putStrLn 和 show 打印结果双精度值。

main :: IO ()
main = do
   let input = "125.34"
   let value = read input :: Double
   putStrLn $ "The double value is: " ++ show value

输出

The double value is: 125.34

示例 2

在此示例中,Text.Read 模块中的 readMaybe 函数返回一个 Maybe 值,如果解析成功,则该值仅为解析后的值;如果解析失败,则该值不为任何内容。

import Text.Read (readMaybe)

stringToDouble :: String -> Maybe Double
stringToDouble s = readMaybe s
main :: IO ()
main = do
   let input = "123.45"
   case stringToDouble input of
      Just value -> putStrLn $ "The double value is: " ++ show value
      Nothing -> putStrLn "Invalid input"

输出

The double value is: 123.45

示例 3

在此方法中,double 函数要么返回带有解析的 Double 和任何剩余 Text 的 Right 值,要么返回带有错误消息的 Left 值。

import Data.Text (pack)
import Data.Text.Read (double)

stringToDouble :: String -> Maybe Double
stringToDouble s = case double $ pack s of
   Right (d, _) -> Just d
   Left _ -> Nothing

main :: IO ()
main = do
   let input = "123.45"
   case stringToDouble input of
      Just value -> putStrLn $ "The double value is: " ++ show value
      Nothing -> putStrLn "Invalid input"

输出

The double value is: 123.45

结论

字符串到双精度的转换是将数值的字符串表示形式(例如"3.14")转换为双精度浮点值(也称为双精度)的过程。在 Haskell 中,您可以使用 read 函数将字符串转换为双精度。read 函数接受一个字符串并返回指定类型的值,例如 Double。如果无法将字符串解析为有效的双精度,则会引发错误。也可以使用 readMaybe 函数或 Text. Read 和 Data.Text.Read 模块中的其他解析函数来更优雅地处理错误。


相关文章