我正在编写基于Google Doc的发票模板的第一个脚本。 它工作正常。我需要在德国使用它,所以我需要能够按照它们在德国展示的方式格式化价格。
我已经编写了一个简短的函数来做这个,但我对是否有更好或更明显的实现方法感兴趣。
// this formats numbers as used in Germany
function numberToGerman(number){
number = Utilities.formatString("%d.%d,%02d", number/1000, number%1000, number%1*100);
return number;
}
目前有一个超过999.999,99或低于1.000,00的问题,但我希望有更好的解决方案。
答案 0 :(得分:3)
以下是answer by Elias Zamaria的略微修改,替换了分隔符并确保了两位小数:
function numberToGerman(number){
var parts = number.toString().split(".");
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ".");
parts[1] = ((parts[1] || "") + "00").slice(0,2);
return parts.join(",");
}
零件是整数和小数部分。正则表达式处理三个数字的组,相应地放置点。小数部分被扩展/截断到两个位置。
很遗憾,Google Apps脚本尚不支持number.toLocaleString("de-DE")
。可以使用number.toLocaleString()
,但性能取决于某人设置了正确的区域设置。此外,也不支持options concerning decimal places,因此这没有多大帮助。
如果要在电子表格中使用此功能,则可以从菜单或脚本中手动对单元格应用适当的格式:例如cell.setNumberFormat("#,###.00")
。这看起来像美式格式,但是一旦电子表格的区域设置改为德国,它就会相应地改变,例如, 1.234.567,89。