You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@freemarker.apache.org by "Sune Keller (Jira)" <ji...@apache.org> on 2025/04/15 12:53:00 UTC
[jira] [Comment Edited] (FREEMARKER-232) Add configuration option to skip call to stripTrailingZeros on BigDecimal Numbers
[ https://issues.apache.org/jira/browse/FREEMARKER-232?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17944670#comment-17944670 ]
Sune Keller edited comment on FREEMARKER-232 at 4/15/25 12:52 PM:
------------------------------------------------------------------
The intention is that numbers in the template which have _not_ been assigned a specific format (e.g. "c" or others) should preserve the scale as given in the input model. I am honestly unsure whether I am formatting numbers correctly for different target locales, and it is likely that my workaround, while fixing the scale part, would ruin something else for e.g. a template assuming a French locale.
I see there is a related question on Stack Overflow: [https://stackoverflow.com/a/55405240], also with the constraint
{quote}Using {{?string[...]}} is out of the question as the exact number of trailing zeroes is unknown.
{quote}
was (Author: JIRAUSER309400):
The intention is that numbers in the template which have _not_ been assigned a specific format (e.g. "c" or others) should preserve the scale as given in the input model. I am honestly unsure whether I am formatting numbers correctly for different target locales, and it is likely that my workaround, while fixing the scale part, would ruin something else for e.g. a template assuming a French locale.
> 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
> Priority: Major
>
> 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)