You need to enable JavaScript to run this app.
最新活动
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Aeson解码时如何处理浮点数的科学计数法并进行四舍五入?

使用 Aeson 的 FromJSON 类型类可以轻松将 JSON 对象转换为 Haskell 中的类型。但是,Aeson 的默认行为是将 JSON 中的浮点数值转换为 Haskell 中的 Double 类型,而且不支持对数值进行四舍五入或者控制输出格式。

要解决这个问题,我们可以自定义一个解码器(Decoder),在解码 JSON 对象时加入对浮点数进行四舍五入的逻辑。

举个例子,假如我们有如下的 JSON 字符串:

{
  "pi": 3.1415926535,
  "e": 2.7182818284
}

我们想要将 pi 和 e 转换为 Haskell 中的 Rational 类型,并对 pi 进行两位小数的四舍五入。

代码示例如下:

{-# LANGUAGE OverloadedStrings #-}

import Data.Aeson
import Data.Scientific (toRealFloat)
import qualified Data.Text as T
import GHC.Real (Ratio((:%)))

data MyNumber = MyNumber Rational

instance FromJSON MyNumber where
  parseJSON = withScientific "MyNumber" $ \s ->
    let r = toRealFloat s :: Double
        r' = fromRational $ toRational r
    in return $ MyNumber $ fromRational $ toRational $ (fromInteger $ round $ r' * (10^n)) / (10^n)
    where
      n = 2 -- round to 2 decimal places, change as necessary

instance Show MyNumber where
  show (MyNumber r) = T.unpack $ T.pack $ show $ fromRational r

jsonStr :: T.Text
jsonStr = "{\"pi\":3.1415926535,\"e\":2.7182818284}"

main :: IO ()
main = case eitherDecodeStrict jsonStr of
  Left err -> putStrLn err
  Right obj -> do
    let myPi = obj :: Object -> Maybe MyNumber = \o -> do
          p <- o
本文内容通过AI工具匹配关键字智能整合而成,仅供参考,火山引擎不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系service@volcengine.com进行反馈,火山引擎收到您的反馈后将及时答复和处理。
展开更多
面向开发者的云福利中心,ECS 60元/年,域名1元起,助力开发者快速在云上构建可靠应用

社区干货

M3U8 视频封装格式的深度解析 | 社区征文

其中,n 是版本号。目前,m3u8 文件最为常见的版本都是 3。使用 ffmpeg 工具录制 rtsp 视频流创建 m3u8 文件时,使用的版本号就是 3。版本 3 的特点就是支持浮点型的 EXTINF 的数值。### EXT-X-TARGETDURATIONEXT-X-TARGETDURATION 字段是用来表示所有分片最大时长的标签,注意这是一个四舍五入的值,如果 m3u8 文件中分片列表中分片最大的时长是 8.02,那么 EXT-X-TARGETDURATION 字段的值是 8。书写格式如下:> #EXT-X-TARGETDU...

Excelize 开源基础发布 2.8.1 版本,2024 年首个更新

aES%2BYPg9AKDrrIw0cHC7e%2FKabpY%3D)Excelize 是 Go 语言编写的用于操作电子表格办公文档的开源基础库,基于 ISO/IEC 29500、ECMA-376 国际标准。可以使用它来读取、写入由 Microsoft Excel、WPS、Apache OpenOffice、LibreOffice 等办公软件创建的电子表格文档。支持 XLAM / XLSM / XLSX / XLTM / XLTX 等多种文档格式,高度兼容带有样式、图片(表)、透视表、切片器等复杂组件的文档,并提供流式读写支持,用于处理包含大规模数据...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

Aeson解码时如何处理浮点数的科学计数法并进行四舍五入? -优选内容

M3U8 视频封装格式的深度解析 | 社区征文
其中,n 是版本号。目前,m3u8 文件最为常见的版本都是 3。使用 ffmpeg 工具录制 rtsp 视频流创建 m3u8 文件时,使用的版本号就是 3。版本 3 的特点就是支持浮点型的 EXTINF 的数值。### EXT-X-TARGETDURATIONEXT-X-TARGETDURATION 字段是用来表示所有分片最大时长的标签,注意这是一个四舍五入的值,如果 m3u8 文件中分片列表中分片最大的时长是 8.02,那么 EXT-X-TARGETDURATION 字段的值是 8。书写格式如下:> #EXT-X-TARGETDU...
Excelize 开源基础发布 2.8.1 版本,2024 年首个更新
aES%2BYPg9AKDrrIw0cHC7e%2FKabpY%3D)Excelize 是 Go 语言编写的用于操作电子表格办公文档的开源基础库,基于 ISO/IEC 29500、ECMA-376 国际标准。可以使用它来读取、写入由 Microsoft Excel、WPS、Apache OpenOffice、LibreOffice 等办公软件创建的电子表格文档。支持 XLAM / XLSM / XLSX / XLTM / XLTX 等多种文档格式,高度兼容带有样式、图片(表)、透视表、切片器等复杂组件的文档,并提供流式读写支持,用于处理包含大规模数据...
MySQL 函数
将一个数字求另一个数字的幂。 Radians (radians):将角度转换为弧度。 Random Number (rand):生成随机数。 对 0 到 1 之间的数字使用 randCanonical。 Round (round):将数字四舍五入到指定的小数位数。 Sign (sig... NULL 的处理:聚合函数对 NULL 值的处理会影响结果。 在 ByteHouse 中,某些函数(例如 MIN 和 MAX)可能会返回 0 或实际值,而 MySQL 或 ADB 将返回 NULL。 精度问题:在计算标准差或方差时,由于浮点数的内部表示,可能...
为自定义模型创建版本
和前后处理版本(可选)。 模型版本模型版本定义了相应的模型文件。创建模型版本时,您需要将模型文件上传到边缘智能控制台。当模型版本发布后,您可以将版本对应的模型文件部署到一体机。ONNX 模型文件加密ONNX 模型支... ONNX 模型文件加密说明边缘智能提供模型加密工具。该模型加密工具是一个 Python 脚本,它基于 AES 算法对本地的 .onnx 模型文件进行加密。单击下载模型加密工具(.zip)下载模型加密工具压缩包后,对压缩包进行解...

Aeson解码时如何处理浮点数的科学计数法并进行四舍五入? -相关内容

数据类型

可以设置浮点数的数值参数(例如 FLOAT(12)、FLOAT(15, 22)、DOUBLE(12)、DOUBLE(4, 18)),但 ByteHouse 会忽略它们。 Decimal(P, S), Decimal32(S), Decimal64(S), Decimal128(S)有符号定点数,可在加法、减法和乘法运算期间保持精度。 对于除法,最低有效数字将被丢弃(而非四舍五入)。别名 Decimal — DEC 参数 P - precision,精度,范围为 [ 1 : 76 ],表示数字中的有效位(包括小数)。 S - scale, 规模,范围为 [ 0 : P ],表示小数...

概述

本节主要从以下几方面介绍 ByteHouse 数据库的 MySQL 模式与原生 MySQL 数据库的不同: 数据类型 函数部分function的部分用法不支持 部分function的结果和MySQL不一致 支持MySQL的DQL 支持MySQL的DML(当前仅支持unique表的更新和删除) 兼容情况 数据类型ByteHouse 数据库支持的数据类型有: 数值类型整数类型:BOOL/BOOLEAN/TINYINT、SMALLINT、MEDIUMINT、INT/INTEGER 和 BIGINT。 定点类型:DECIMAL * 和 NUMERIC。 浮点类型:FL...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

产品体验

体验中心

云服务器特惠

云服务器
云服务器ECS新人特惠
立即抢购

白皮书

一图详解大模型
浓缩大模型架构,厘清生产和应用链路关系
立即获取

最新活动

爆款1核2G共享型服务器

首年60元,每月仅需5元,限量秒杀
立即抢购

火山引擎增长体验专区

丰富能力激励企业快速增长
查看详情

数据智能VeDI

易用的高性能大数据产品家族
了解详情

一键开启云上增长新空间

立即咨询