如何在javascript中解析带有两位小数的浮点数?

IT技术 javascript floating-point
2021-02-14 03:35:41

我有以下代码。我想要它,如果 price_result 等于一个整数,比如说 10,那么我想添加两个小数位。所以 10 就是 10.00。或者如果它等于 10.6 就是 10.60。不知道如何做到这一点。

price_result = parseFloat(test_var.split('$')[1].slice(0,-1));
6个回答

您可以使用toFixed()来做到这一点

var twoPlacedFloat = parseFloat(yourString).toFixed(2)
添加括号以获取数字而不是字符串: parseFloat((yourString).toFixed(2));
2021-04-18 03:35:41
但是 toFixed() 以字符串形式返回数字,如果要比较数字,则需要再次使用 parseFloat 。
2021-04-21 03:35:41
乐于助人并保持良好的工作——“每天学习新事物”
2021-05-08 03:35:41
使用var twoPlacedFloat = + parseFloat(yourString).toFixed(2)转换为浮动
2021-05-11 03:35:41
尽管如此,toFixed 还是有很多问题的。此外,这里有一个比 w3schools developer.mozilla.org/en-US/docs/JavaScript/Reference/...
2021-05-12 03:35:41

如果您需要性能(例如在游戏中):

Math.round(number * 100) / 100

它大约是 parseFloat(number.toFixed(2)) 的 100 倍

http://jsperf.com/parsefloat-tofixed-vs-math-round

如果我将 100's 改为 200's 速度会增加吗?
2021-04-17 03:35:41
使用上述公式'2.00' 返回 2。但我希望它是 2.00。
2021-04-22 03:35:41
如果浮点运算的数量保持不变,则速度将相同,所以没有
2021-04-25 03:35:41
@ncubica 这是关于小数位的。如果取 100,则取逗号后 2 位数,取 10 取逗号后取 1 位数,依此类推。
2021-04-28 03:35:41
你不能同时拥有它。如果您希望输出是数字而不是字符串,那么您将不会得到尾随零。所以你可以使用上面的转换为字符串: var twoPlacedFloat = (Math.round(2.002745 * 100) / 100).toFixed(2);
2021-05-08 03:35:41

当您使用 时toFixed,它总是以字符串形式返回值。这有时会使代码复杂化。为避免这种情况,您可以为 Number 制作另一种方法。

Number.prototype.round = function(p) {
  p = p || 10;
  return parseFloat( this.toFixed(p) );
};

并使用:

var n = 22 / 7; // 3.142857142857143
n.round(3); // 3.143

或者干脆:

(22/7).round(3); // 3.143
如果我申请“2.00”号码,则返回 2
2021-04-16 03:35:41
我编写了一个购物车程序并尝试使用链接到 parseFloat() 方法的 toFixed() 和 round() 方法。这些方法都不适用于 parseFloat()。
2021-04-17 03:35:41
此方法用于更正,而不是用于格式化。例如:0.1 + 0.2 // 0.30000000000000004所以我需要对此进行更正(0.1+0.2).round() // 0.3
2021-04-29 03:35:41
这让我免于头疼。+1 就是为了这个。我不知道它会将数字变成字符串。
2021-05-04 03:35:41
@Lukas 不是,如果 parseFloat
2021-05-06 03:35:41

要返回一个数字,请添加另一层括号。保持清洁。

var twoPlacedFloat = parseFloat((10.02745).toFixed(2));
这应该是对弗拉达回答的评论。
2021-04-26 03:35:41
你的公式中遗漏了什么吗?var twoPlacedFloat = parseFloat(('2.00').toFixed(2))产生错误。
2021-04-28 03:35:41
抱歉,有一个字符串变量而不是数字,toFixed() 需要 - 现在修复。但是 Rob 使用 Math.round 的回答是在性能方面需要考虑的问题。
2021-05-03 03:35:41

如果您的目标是解析,并且您的输入可能是文字,那么您会期望 afloat并且toFixed不会提供,所以这里有两个简单的函数来提供:

function parseFloat2Decimals(value) {
    return parseFloat(parseFloat(value).toFixed(2));
}

function parseFloat2Decimals(value,decimalPlaces) {
    return parseFloat(parseFloat(value).toFixed(decimalPlaces));
}
不过它是一个浮点数,所以 10.5 等于 10.50
2021-04-22 03:35:41
这不像预期的那样工作。期待parseFloat(parseFloat('10.5').toFixed(2))回归返回10.510.50parseFloat(parseFloat('10.50').toFixed(2))10.5
2021-05-07 03:35:41
我知道 10.5 == 10.50 但我需要打印到客户端 10.50 而不是 10.5
2021-05-09 03:35:41