前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >认识 DECIMAL 类型

认识 DECIMAL 类型

作者头像
恋喵大鲤鱼
发布2024-05-29 12:06:31
770
发布2024-05-29 12:06:31
举报
文章被收录于专栏:C/C++基础C/C++基础
文章目录

  • 1.作用
  • 2.实现原理
  • 参考文献

1.作用

为保证小数精度不丢失,数据库表使用 DECIMAL 类型,服务代码中使用,比如 Golang 第三方库 https://github.com/shopspring/decimal。接口协议可以使用 string 表示。

从 DB 存储,服务数据计算与前端接口返回,全链路保证小数精度不会丢失。

DECIMAL 类型另外一个作用就是可以存储非常大的数字,并且在计算时不会出现精度损失。

2.实现原理

各类语言及数据库一般都提供了DECIMAL 类型的支持,一般是以一个 struct 来表示一个 DECIMAL 类型。

比如 MySQL 的实现是:

代码语言:javascript
复制
typedef int32 decimal_digit_t;
struct decimal_t {
int intg, frac, len;
bool sign;
decimal_digit_t *buf;
};

Golang 库 github.com/shopspring/decimal 的 DECIMAL 类型定义如下:

代码语言:javascript
复制
// Decimal represents a fixed-point decimal. It is immutable.
// number = value * 10 ^ exp
type Decimal struct {
	value *big.Int

	// NOTE(vadim): this must be an int32, because we cast it to float64 during
	// calculations. If exp is 64 bit, we might lose precision.
	// If we cared about being able to represent every possible decimal, we
	// could make exp a *big.Int but it would hurt performance and numbers
	// like that are unrealistic.
	exp int32
}

参考文献

13.1.3 Fixed-Point Types (Exact Value) - DECIMAL, NUMERIC Decimal类型设计方法 - 知乎

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 1.作用
  • 2.实现原理
  • 参考文献
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档