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

时间:2010-12-14 01:41:30

标签: javascript floating-point

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

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

17 个答案:

答案 0 :(得分:834)

您可以使用toFixed()来执行此操作

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

答案 1 :(得分:46)

使用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 :(得分:40)

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

Math.round(number * 100) / 100

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

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

答案 3 :(得分:8)

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

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

答案 4 :(得分:2)

来自lodash的ceil可能是最好的

_.ceil("315.9250488",2) 
_.ceil(315.9250488,2) 
_.ceil(undefined,2)
_.ceil(null,2)
_.ceil("",2)

也可以使用数字和安全

答案 5 :(得分:1)

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

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

  1. 使用数据作为字符串或
  2. 同意在末尾ex 2.50-> 2.5处具有大小写为'0'的截断值。 Number Cannot have trailing zeros after decimal

答案 6 :(得分:1)

如果您的目标是解析,并且您的输入可能是字面意思,那么您希望floattoFixed不会提供该字符,因此这里提供了两个简单的函数:

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

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

答案 7 :(得分:0)

它的价值:十进制数,是一个十进制数,你要么将它四舍五入到其他值。在内部,根据浮点关节和处理规则,它将接近小数部分。它在内部保留一个十进制数字(浮点数,在JS中为双精度数),无论你想用多少数字显示它。

要显示它,您可以通过字符串转换选择显示的精度到您想要的任何值。演示是一个显示问题,而不是存储问题。

答案 8 :(得分:0)

您可以将价格存储为字符串

你可以使用 数字(字符串)

用于您的计算。

示例

Number("34.50") == 34.5

还有

Number("35.65") == 35.65

如果您对 Number 函数感到满意,可以使用它。

答案 9 :(得分:0)

我已经为我的案件尝试过了,它会正常工作。

var multiplied_value = parseFloat(given_quantity*given_price).toFixed(3);

样本输出:

9.007

答案 10 :(得分:0)

您可以使用.toFixed()将浮点值设置为2位数字

示例

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

//output
9.99

答案 11 :(得分: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    
}

答案 12 :(得分:-1)

适用于我的解决方案如下

parseFloat(value)

答案 13 :(得分:-1)

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;
  }

答案 14 :(得分:-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);
    }
}

答案 15 :(得分:-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);
}

答案 16 :(得分:-3)

我有其他解决方案。

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

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