Ruby如何将字符串格式大整数的小数点左移固定位数?
Ruby 加密货币大整数金额格式化方案
核心思路
加密货币金额通常精度极高,直接转换为普通浮点数会出现精度丢失问题,因此采用Ruby标准库自带的BigDecimal做高精度计算,保证数值准确性,完成小数点移位后再按要求格式化输出即可。
可直接运行的代码示例
# 引入Ruby标准库BigDecimal,无需额外安装第三方依赖 require 'bigdecimal' # 示例输入数据 price_info = { "base_price" => "5000000000000000000", "decimals" => 18 } # 计算逻辑 raw_num = BigDecimal(price_info["base_price"]) divisor = 10 ** price_info["decimals"] actual_value = raw_num / divisor # 格式化输出保留2位小数 result = format("%.2f", actual_value) puts result # 输出:5.00
方案优势
- 完全规避大整数转浮点数的精度丢失问题,支持最长上百位的大整数字符串处理,覆盖15-30位的常规加密货币金额场景
- 如果后续需要对金额做加减乘除运算,可直接使用
actual_value这个BigDecimal对象,全程保证精度准确 - 自动处理边界情况:比如当base_price长度小于decimals时,自动补前导0计算正确的小数结果
内容的提问来源于stack exchange,提问作者Shpigford
相关产品推荐
相关产品推荐

