web-dev-qa-db-ja.com

JavaScriptで小数点以下2桁のfloatを解析する方法

次のようなコードがあります。もしprice_resultが整数に等しいなら、10としましょう、それで私は小数点以下2桁を加えたいと思います。したがって、10は10.00になります。または、10.6と等しい場合は10.60になります。これを行う方法がわからない。

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

あなたは toFixed() を使うことができます

var twoPlacedFloat = parseFloat(yourString).toFixed(2)
831
Mahesh Velaga

toFixedを使用すると、常に値を文字列として返します。これは時々コードを複雑にします。それを避けるために、あなたは数のための代替方法を作ることができます。

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
44
Vlada

パフォーマンスが必要な場合(ゲームのように):

Math.round(number * 100) / 100

ParseFloatの約100倍の速さです(number.toFixed(2))。

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

40
Rob Boerman

数値を返すには、括弧をもう1層追加します。清潔に保ちます。

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

lodashからのceilはおそらく最高です

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

数字でも動作します、そしてそれは安全です

2
Antonio Terreno

あなたの目的がパースであり、あなたの入力がリテラルである場合、あなたはfloattoFixedがそれを提供しないことを期待するでしょう、それでこれを提供する2つの簡単な関数があります:

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

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

@sd短い答え:JSには、小数点の後にゼロが続くNumberデータ型の値を持つ方法はありません。

ロングアンサー:JavaScriptのtoFixedまたはtoPrecision関数のプロパティで、文字列を返します。この理由は、Numberデータ型にa = 2.00のような値を設定することはできず、常に小数点以下の末尾のゼロを削除するためです。これはNumberデータ型の組み込みプロパティです。 JSで上記を達成するには、2つのオプションがあります

  1. データを文字列として使用するか、
  2. 2.50-> 2.5の場合、末尾が「0」のケースで値が切り捨てられることに同意します。 Number Cannot have trailing zeros after decimal
1
abhinav pandey

四捨五入したくない場合は、以下の機能を使用してください。

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
Nimesh

その価値のために:10進数は10進数です、あなたはどちらか他の値に丸めるかしないかのどちらかです。内部的には、浮動小数点の関節の取り扱いと取り扱いの原則に従って、それは小数点以下の桁数に近似します。表示する桁数に関係なく、内部的に10進数(浮動小数点、JSでは2倍)のままです。

表示用に表示するには、文字列変換によって表示の精度を自由に選択できます。プレゼンテーションは表示上の問題であり、保管上の問題ではありません。

0
andora

私のために働く解決策は以下の通りです

parseFloat(value)
0
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;
  }