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

use*_*034 383 javascript floating-point

我有以下代码.我想这样,如果price_result等于一个整数,让我们说10,那么我想添加两个小数位.所以10将是10.00.或者,如果它等于10.6将是10.60.不知道该怎么做.

price_result = parseFloat(test_var.split('$')[1].slice(0,-1));
Run Code Online (Sandbox Code Playgroud)

Mah*_*aga 862

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

var twoPlacedFloat = parseFloat(yourString).toFixed(2)
Run Code Online (Sandbox Code Playgroud)

  • 但是toFixed()将number作为字符串返回,如果要比较数字,则需要再次使用parseFloat. (117认同)
  • 使用`var twoPlacedFloat = + parseFloat(yourString).toFixed(2)`转换为float (16认同)
  • 直到现在才知道toFixed().thx今天学到了新东西!!! (13认同)
  • 添加parens来获取数字而不是字符串:parseFloat((yourString).toFixed(2)); (12认同)
  • 虽然toFixed非常麻烦.此外,这是一个比w3schools更好的链接https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number/toFixed (3认同)
  • JavaScript 默认没有 float 数据类型。检查这个 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structs 它只有数字数据类型。因此,任何将数字转换为浮点值的尝试实际上都会将数字转换为字符串/数字表示形式。所以现实生活中的浮点值“2.00”始终是 JavaScript 中的字符串/数字。 (3认同)

Vla*_*ada 46

使用时toFixed,它始终将值作为字符串返回.这有时会使代码复杂化.为避免这种情况,您可以为Number创建替代方法.

Number.prototype.round = function(p) {
  p = p || 10;
  return parseFloat( this.toFixed(p) );
};
Run Code Online (Sandbox Code Playgroud)

并使用:

var n = 22 / 7; // 3.142857142857143
n.round(3); // 3.143
Run Code Online (Sandbox Code Playgroud)

或者干脆:

(22/7).round(3); // 3.143
Run Code Online (Sandbox Code Playgroud)


Rob*_*man 42

如果你需要表演(比如游戏):

Math.round(number * 100) / 100
Run Code Online (Sandbox Code Playgroud)

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

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

  • 使用上面的公式'2.00'返回2.但我希望它是2.00. (4认同)
  • 你不可能两种方式.如果您希望输出是数字而不是字符串,那么您将不会得到尾随零.所以你可以使用上面转换为字符串:var twoPlacedFloat =(Math.round(2.002745*100)/ 100).toFixed(2); (4认同)
  • 如果将100改为200,速度会增加吗? (2认同)

pva*_*len 10

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

var twoPlacedFloat = parseFloat((10.02745).toFixed(2));
Run Code Online (Sandbox Code Playgroud)

  • 你错过了公式中的一些东西吗?`var twoPlacedFloat = parseFloat(('2.00').toFixed(2))`生成错误. (2认同)

Ant*_*eno 7

lodash 的 ceil 可能是最好的

_.ceil("315.9250488",2) 
_.ceil(315.9250488,2) 
_.ceil(undefined,2)
_.ceil(null,2)
_.ceil("",2)
Run Code Online (Sandbox Code Playgroud)

也可以与号码一起使用,而且很安全


Riz*_*izo 7

您可以使用 .toFixed() 来获取 2 位浮点值

示例

let newValue = parseFloat(9.990000).toFixed(2)

//output
9.99
Run Code Online (Sandbox Code Playgroud)


Sav*_*age 6

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

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

function parseFloat2Decimals(value,decimalPlaces) {
    return parseFloat(parseFloat(value).toFixed(decimalPlaces));
}
Run Code Online (Sandbox Code Playgroud)

  • 这不像预期的那样工作。`parseFloat(parseFloat('10.5').toFixed(2))` 返回 `10.5` 预计 `10.50`。还有 `parseFloat(parseFloat('10.50').toFixed(2))` 返回 `10.5` (4认同)

Mat*_*att 5

parseFloat(parseFloat(amount).toFixed(2))
Run Code Online (Sandbox Code Playgroud)

你必须解析它两次。第一次是将字符串转换为浮点型,然后固定为两位小数(但返回toFixed的是字符串),最后再次解析。