格式化数字的功能,如德国

时间:2016-11-27 13:44:15

标签: google-apps-script

我正在编写基于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的问题,但我希望有更好的解决方案。

1 个答案:

答案 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(",");
}

零件是整数和小数部分。正则表达式处理三个数字的组,相应地放置点。小数部分被扩展/截断到两个位置。

说明

  1. 很遗憾,Google Apps脚本尚不支持number.toLocaleString("de-DE")。可以使用number.toLocaleString(),但性能取决于某人设置了正确的区域设置。此外,也不支持options concerning decimal places,因此这没有多大帮助。

  2. 如果要在电子表格中使用此功能,则可以从菜单或脚本中手动对单元格应用适当的格式:例如cell.setNumberFormat("#,###.00")。这看起来像美式格式,但是一旦电子表格的区域设置改为德国,它就会相应地改变,例如, 1.234.567,89。