【问题标题】:Xtend: Generators produce comma instead of pointXtend:生成器生成逗号而不是点
【发布时间】:2016-06-04 23:16:09
【问题描述】:

我正在使用模板表达式来生成文件。例如:

def generateStuff(MyObject in) {
    '''
    This is the wrong value: «calculatedoubleValue(in.doubleValue)»
    '''
}

doubleValue 的值是double。但是生成器会生成逗号而不是点作为分隔符。

我也试过用DecimalFormat,例如:

def generateStuff(MyObject in) {
    var df = new DecimalFormat("0.000");
    var calculated = calculatedoubleValue(in.doubleValue)
    '''
    This is the wrong value: «df.format(calculated)»
    '''
}

但不幸的是,它仍然会产生一个逗号。我想知道,因为它只发生在少数几个值上,而不是全部,尽管我只使用doubles。另一个奇怪的事情是,它在调试(运行时 Eclipse 应用程序)时会产生分数,但在我将应用程序导出为 Eclipse 产品后会产生逗号。

这可能是什么原因?

【问题讨论】:

    标签: java templates generator code-generation xtend


    【解决方案1】:

    在模板表达式中,对任何值都调用 toString()(请参阅StringConcatenation)。 Double.toString 将始终使用 '.',因此问题一定出在其他地方。 也许问题出在您的“calculatedDouble”方法中?

    【讨论】:

    • 斯文,非常感谢您的快速回答。我想知道为什么它在调试期间(运行时 Eclipse 应用程序)有效,但在导出 Eclipse 产品后无效。有什么想法吗?
    【解决方案2】:

    虽然我没有太多关于您的环境的信息,但根据您的示例代码,您不直接使用 Double.toString() (始终使用 . 作为小数分隔符),而是使用区域设置敏感的 DecimalFormat .

    当使用DecimalFormat(String) 构造DecimalFormat 时,它将使用默认的“格式语言环境”。在某些地区,小数点分隔符是.(例如英语),但在其他地区是,(例如匈牙利语)。有关详细信息,请参阅API docs

    针对您的问题提出的解决方案:

    • 确保应用程序在每种情况下都使用相同的语言环境。
    • 明确设置特定于区域设置的格式选项。

    真实代码:

    @Test
    public void testDecimalFormat() {
        assertEquals("0.000", new DecimalFormat("0.000", new DecimalFormatSymbols(Locale.ENGLISH)).format(0.0));
        assertEquals("0,000", new DecimalFormat("0.000", new DecimalFormatSymbols(new Locale("hu"))).format(0.0));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-07
      • 1970-01-01
      • 2022-08-14
      • 2018-05-20
      相关资源
      最近更新 更多