Sune Keller created FREEMARKER-232:
--------------------------------------

             Summary: Add configuration option to skip call to 
stripTrailingZeros on BigDecimal Numbers
                 Key: FREEMARKER-232
                 URL: https://issues.apache.org/jira/browse/FREEMARKER-232
             Project: Apache Freemarker
          Issue Type: Improvement
          Components: engine
    Affects Versions: 2.3.32
            Reporter: Sune Keller


When evaluating a template in which the model contains a field for which the 
value is a simple BigDecimal with a given scale and trailing zeros within that 
scale, the trailing zeros are stripped away by the implementation in 
{{{}freemarker.core.CTemplateNumberFormat#formatToPlainText{}}}:
{code:java}
} else if (num instanceof BigDecimal) {
    BigDecimal bd = ((BigDecimal) num).stripTrailingZeros();
    int scale = bd.scale();
    if (scale <= 0) {
        // A whole number. Maybe a long ID in a database or other system, and 
for those exponential form is not
        // expected generally, so we avoid that. But then, it becomes too easy 
to write something like
        // 1e1000000000000 and kill the server with a terra byte long rendering 
of the number, so for lengths
        // that realistically aren't ID-s or such, we use exponential format 
after all:
        if (scale <= -100) {
            return bd.toString(); // Will give exponential form for this scale
        }
        return bd.toPlainString(); // Never gives exponential form
    }
    // `db` is not a whole number. Note that `bd` is already normalized to not 
have trailing zeroes.
    return bd.toString(); // Gives exponential form of the absolute value of 
the number is less than 1E-7 {code}
It would be wonderful to be able to configure whether any trailing zeros are 
stripped or not by way of some configuration option, so as to avoid having to 
copy and re-implement this final non-public class.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to