From 22e979a6fae0038c703a95c7421f159f71934a38 Mon Sep 17 00:00:00 2001 From: Ian Ker-Seymer Date: Fri, 5 Dec 2025 15:54:52 -0500 Subject: [PATCH] Use floating-point format for BigDecimal stringification (#2022) ## Summary - BigDecimal values now stringify using `to_s("F")` format instead of the default `to_s` ## Why Ruby's default `BigDecimal#to_s` produces engineering/scientific notation for certain values: ```ruby BigDecimal("0.00001").to_s # => "0.1E-4" BigDecimal("12345678.9").to_s # => "0.123456789E8" ``` This is rarely the desired output in templates. Using `to_s("F")` produces the expected floating-point format: ```ruby BigDecimal("0.00001").to_s("F") # => "0.00001" BigDecimal("12345678.9").to_s("F") # => "12345678.9" ``` --- lib/liquid/utils.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/liquid/utils.rb b/lib/liquid/utils.rb index 2bdb0c52..eb0a02a9 100644 --- a/lib/liquid/utils.rb +++ b/lib/liquid/utils.rb @@ -95,6 +95,8 @@ module Liquid def self.to_s(obj, seen = {}) case obj + when BigDecimal + obj.to_s("F") when Hash # If the custom hash implementation overrides `#to_s`, use their # custom implementation. Otherwise we use Liquid's default