模板字符串中的数字格式(Javascript - ES6)

aqu*_*tae 26 javascript string-formatting ecmascript-6 template-strings

我想知道是否可以格式化Javascript模板字符串中的数字,例如:

var n = 5.1234;
console.log(`This is a number: $.2d{n}`);
// -> 5.12
Run Code Online (Sandbox Code Playgroud)

或者可能

var n = 5.1234;
console.log(`This is a number: ${n.toString('.2d')}`);
// -> 5.12
Run Code Online (Sandbox Code Playgroud)

这种语法显然不起作用,它只是我正在寻找的事物类型的一个例子.

我知道像sprintffrom underscore.string这样的工具,但这似乎是JS应该能够开箱即用的东西,特别是考虑到模板字符串的强大功能.

编辑

如上所述,我已经知道第三方工具(例如sprintf)和自定义功能.类似的问题(例如,相当于printf/String.Format的JavaScript)根本没有提到模板字符串,可能是因为在ES6模板字符串出现之前就被问过了.我的问题是针对ES6的,并且与实施无关.我很高兴接受一个答案"不,这是不可能的",如果是这样的话,但是最好的是有关提供此功能的新ES6功能的信息,或者是否有关于此功能是否在其上的一些信息办法.

Ber*_*rgi 23

不,ES6不引入任何新的数字格式的功能,你将不得不忍受与现有的.toExponential(fractionDigits),.toFixed(fractionDigits),.toPrecision(precision),.toString([radix])toLocaleString(…)(已更新,有选择地支持ECMA-402标准,虽然).
模板字符串与数字格式无关,它们只是去函数调用(如果标记)或字符串连接(默认).

如果这些Number方法对您来说还不够,那么您必须自己动手.如果您愿意,您当然可以将格式化函数编写为模板字符串标记.


小智 5

您应该能够使用数字的toFixed()方法:

var num = 5.1234;
var n = num.toFixed(2); 
Run Code Online (Sandbox Code Playgroud)