如何解析浮点数在JavaScript中的两位小数?


410

我有以下代码。我想要这样,如果price_result等于一个整数,比如说10,那么我想加上两个小数位。所以10将是10.00。如果等于10.6,则等于10.60。不确定如何执行此操作。

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

Answers:


914

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

var twoPlacedFloat = parseFloat(yourString).toFixed(2)

1
很高兴为您提供帮助并保持良好的工作状态–“每天学习新事物”
Mahesh Velaga 2010年

3
不过,toFixed确实存在很多问题。此外,这里比W3Schools的更好的链路developer.mozilla.org/en-US/docs/JavaScript/Reference/...
gotofritz

125
但是toFixed()返回数字作为字符串,如果要比较数字,则需要再次使用parseFloat。
Pedro Muniz

19
使用var twoPlacedFloat = + parseFloat(yourString).toFixed(2)转换为浮动
何塞·鲁伊•桑托斯

13
添加括号以获取数字而不是字符串:parseFloat((yourString).toFixed(2));
pvanallen 2014年

50

使用时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

我编写了一个购物车程序,并尝试使用链接到parseFloat()方法的toFixed()和round()方法。这些方法都不能与parseFloat()一起使用。
克里斯22年

这使我免于头痛。为此+1。我不知道它将数字转换为字符串。
卢卡斯2014年

@Lukas不是,如果要进行parseFloat
Vlada

如果我申请“ 2.00”号码,则返回2
Saurin Dashadia'Apr 9'15

此方法用于更正,而不用于格式化。例如:0.1 + 0.2 // 0.30000000000000004所以我需要对此进行更正(0.1+0.2).round() // 0.3
Vlada

47

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

Math.round(number * 100) / 100

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

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


5
上面的公式“ 2.00”返回2。但我希望它是2.00。
Saurin Dashadia

5
您不能同时拥有这两种方式。如果希望输出为数字而不是字符串,则不会出现尾随零。因此您可以将上面的转换为字符串:var twoPlacedFloat =(Math.round(2.002745 * 100)/ 100).toFixed(2);
pvanallen 2015年

3
如果将100改为200,速度会增加吗?
alashow

如果浮点运算的次数保持相同,则速度将相同,所以不这样
Rob Boerman

为什么number * 1我不容易遗漏某些东西🤔?
ncubica

11

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

var twoPlacedFloat = parseFloat((10.02745).toFixed(2));

2
您的公式中缺少什么吗?var twoPlacedFloat = parseFloat(('2.00').toFixed(2))产生错误。
Saurin Dashadia 2015年

抱歉,有一个toFixed()需要的字符串变量而不是数字-现在已修复。但是Rob在Math.round上的回答是要从性能方面考虑的。
pvanallen 2015年

这应该是对弗拉达答案的评论。
罗德里罗克18'Aug

5

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

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

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

2
那不符合预期。期待parseFloat(parseFloat('10.5').toFixed(2))回报。还要返回10.510.50parseFloat(parseFloat('10.50').toFixed(2))10.5
MTK

虽然是浮动的,所以10.5等于10.50
Savage

我知道10.5 == 10.50,但我需要打印到客户端10.50而不是10.5
MTK


1

@sd 简短答案: JS中没有办法让Number数据类型的值在小数点后尾随零。

长答案:它是JavaScript 的属性toFixedtoPrecision函数,返回String。原因是Number数据类型不能具有a = 2.00之类的值,它将始终删除小数点后的尾随零。这是Number数据类型的内置属性。因此,要在JS中实现上述目标,我们有2个选择

  1. 要么将数据用作字符串,要么
  2. 同意在末尾ex 2.50-> 2.5处具有大小写为'0'的截断值。 数字十进制后不能有尾随零

0

如果不想舍入,请使用以下功能。

function ConvertToDecimal(num) {
    num = num.toString(); //If it's not already a String
    num = num.slice(0, (num.indexOf(".")) + 3); //With 3 exposing the hundredths place
   alert('M : ' +  Number(num)); //If you need it back as a Number    
}

0

对于它的价值:十进制数是十进制数,您可以将其舍入为其他值或不舍入。在内部,它将根据浮点关节和处理的规则近似为一个小数部分。无论要显示多少位数,它在内部都保留一个十进制数字(浮点数,在JS中为双精度)。

要显示它以进行显示,您可以通过字符串转换将显示的精度选择为所需的精度。演示是一个显示问题,而不是存储问题。


0

您可以使用.toFixed()来使浮点值2位数字

实例

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

//output
9.99

-1

试试看(请参见代码中的注释):

function fixInteger(el) {
    // this is element's value selector, you should use your own
    value = $(el).val();
    if (value == '') {
        value = 0;
    }
    newValue = parseInt(value);
    // if new value is Nan (when input is a string with no integers in it)
    if (isNaN(newValue)) {
        value = 0;
        newValue = parseInt(value);
    }
    // apply new value to element
    $(el).val(newValue);
}

function fixPrice(el) {
    // this is element's value selector, you should use your own
    value = $(el).val();
    if (value == '') {
        value = 0;
    }
    newValue = parseFloat(value.replace(',', '.')).toFixed(2);
    // if new value is Nan (when input is a string with no integers in it)
    if (isNaN(newValue)) {
        value = 0;
        newValue = parseFloat(value).toFixed(2);
    }
    // apply new value to element
    $(el).val(newValue);
}

-1

简单的JavaScript,要浮动的字符串:

var it_price = chief_double($("#ContentPlaceHolder1_txt_it_price").val());

function chief_double(num){
    var n = parseFloat(num);
    if (isNaN(n)) {
        return "0";
    }
    else {
        return parseFloat(num);
    }
}


-2
Solution for FormArray controllers 

初始化FormArray表单生成器

  formInitilize() {
    this.Form = this._formBuilder.group({
      formArray: this._formBuilder.array([this.createForm()])
    });
  }

建立表格

  createForm() {
    return (this.Form = this._formBuilder.group({
      convertodecimal: ['']
    }));
  }

将表单值设置到表单控制器中

  setFormvalues() {
    this.Form.setControl('formArray', this._formBuilder.array([]));
    const control = <FormArray>this.resourceBalanceForm.controls['formArray'];
    this.ListArrayValues.forEach((x) => {
      control.push(this.buildForm(x));
    });
  }

  private buildForm(x): FormGroup {
    const bindvalues= this._formBuilder.group({
      convertodecimal: x.ArrayCollection1? parseFloat(x.ArrayCollection1[0].name).toFixed(2) : '' // Option for array collection
// convertodecimal: x.number.toFixed(2)    --- option for two decimal value 
    });

    return bindvalues;
  }

-3

我还有其他解决方案。

您可以用来round()代替toFixed()

var twoPlacedFloat = parseFloat(yourString).round(2)

7
@AustinHenley我尝试使用round(),但是没有用。这可能就是人们拒绝投票的原因。他可能是指Math.round()
内森

@Nathan它需要内联使用,parseFloat()因为我已经更新了@zsalzbank的答案
Alastair

3
不,它不起作用。您可以尝试Math.round(parseFloat(yourString),2);
Augie Gardner 2014年

1
为什么不拒绝永远不会奏效的答案呢?根本没有像round()js中的数字这样的方法。真正的问题是谁对此表示支持。
meandre '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.