Javascript 如果字符串值包含浮点解析并格式化,则返回字符串

Javascript 如果字符串值包含浮点解析并格式化,则返回字符串,javascript,angularjs,Javascript,Angularjs,我使用的API在响应中只返回字符串。我需要格式化字符串中返回的任何十进制值,使其具有前导零,但没有尾随零。如果该值不是字符串中的浮点值,则应返回该值,而不进行任何格式更改 示例:如果值为“.7”、“0.70”或“0.70”,则我的函数将始终返回“0.7”。如果值为“1+”,它将返回“1+” 起初,我认为API正在返回浮动,所以我在下面这样做。places参数是要显示的小数位数 function setDecimalPlace(input, places) { if (isNaN(inpu

我使用的API在响应中只返回字符串。我需要格式化字符串中返回的任何十进制值,使其具有前导零,但没有尾随零。如果该值不是字符串中的浮点值,则应返回该值,而不进行任何格式更改

示例:如果值为“.7”、“0.70”或“0.70”,则我的函数将始终返回“0.7”。如果值为“1+”,它将返回“1+”

起初,我认为API正在返回浮动,所以我在下面这样做。places参数是要显示的小数位数

function setDecimalPlace(input, places) {
    if (isNaN(input)) return input;
    var factor = "1" + Array(+(places > 0 && places + 1)).join("0");

    return Math.round(input * factor) / factor;
};
如果值是十进制字符串,但如果字符串不包含浮点值,则只返回输入的值,如何完成上述函数的操作?作为旁白,我使用Angular,并最终将其作为过滤器。

UPDATE#2 也来自

因此,在最后,您可以检查
isFloat
然后
isInt
然后得出它是一个字符串的结论

正如您在“7.0”案例中所说(评论):

var v = '7.0';
var formatted = (isFloat(v) || isInt(parseFloat(v))) ? parseFloat(v) : v;
更新 实际上,不需要
numberFormat
函数:

var v = '.7';
if(isFloat(v)) var formatted = parseFloat(v);

采取以下措施:

function isFloat(n) {
  n = parseFloat(n);
  // from https://stackoverflow.com/a/3886106/4640499
  return n === Number(n) && n % 1 !== 0;
}
function numberFormat(e, t, n, o) {
  // from http://phpjs.org/functions/number_format/
  var r = e,
    u = isNaN(t = Math.abs(t)) ? 2 : t,
    c = void 0 == n ? '.' : n,
    a = void 0 == o ? ',' : o,
    l = 0 > r ? '-' : '',
    d = parseInt(r = Math.abs(+r || 0).toFixed(u)) + '',
    s = (s = d.length) > 3 ? s % 3 : 0
  ;
  return l + (s ? d.substr(0, s) + a : '') +
    d.substr(s).replace(/(\d{3})(?=\d)/g, '$1' + a) +
    (u ? c + Math.abs(r - d).toFixed(u).slice(2) : '');
}
function formatFloat(e) {
  return numberFormat(e, 1);
}
然后:

var v = '.7';
console.info(isFloat(v));
console.info(formatFloat(v));

if(isFloat(v)) formatFloat(v);

这个问题的可能重复之处并不是真正处理字符串值,而是处理前导零。很好的解决方案!有一个问题,如果一个数字以7.0的形式出现,那么最好是在字符串级别解析它,还是在更新中遵循parseFloat?
var v = '.7';
console.info(isFloat(v));
console.info(formatFloat(v));

if(isFloat(v)) formatFloat(v);