development

Javascript에서 소수점 이하 두 자리로 부동 소수점을 구문 분석하는 방법은 무엇입니까?

big-blog 2020. 2. 25. 22:51
반응형

Javascript에서 소수점 이하 두 자리로 부동 소수점을 구문 분석하는 방법은 무엇입니까?


다음 코드가 있습니다. price_result가 정수와 같으면 10이라고 말하면 소수점 이하 두 자리를 추가하고 싶습니다. 따라서 10은 10.00입니다. 또는 10.6과 같으면 10.60이됩니다. 방법을 잘 모르겠습니다.

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

toFixed ()사용 하여 그렇게 할 수 있습니다.

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

를 사용 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

게임과 같은 성능이 필요한 경우 :

Math.round(number * 100) / 100

parseFloat (number.toFixed (2))보다 약 100 배 빠릅니다.

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


숫자를 반환하려면 괄호의 다른 레이어를 추가하십시오. 깨끗하게 유지합니다.

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

당신의 목표는 구문 분석 할 수 있으며, 귀하의 의견은 문자 그대로있을 경우에, 당신은을 기대 float하고 toFixed그래서 여기를 제공하기 위해 두 가지 간단한 기능은 다음 사항을 제공하지 않습니다 :

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

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

lodash에서 ceil은 아마 최고입니다

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

숫자로도 작동하며 안전합니다.


@ sd 짧은 답변 : JS에서 소수점 뒤에 0이 오는 숫자 데이터 유형 값을 갖는 방법은 없습니다.

긴 답변 : 문자열을 반환하는 JavaScript 의 속성 toFixed또는 toPrecision기능입니다. 그 이유는 Number 데이터 유형이 a = 2.00과 같은 값을 가질 수 없기 때문에 항상 소수점 다음에 오는 0을 제거하기 때문입니다. 이것은 Number Datatype의 내장 특성입니다. JS에서 위를 달성하기 위해 우리는 두 가지 옵션이 있습니다

  1. 데이터를 문자열로 사용하거나
  2. 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    
}

그 가치는 다음과 같습니다. 십진수는 십진수입니다. 다른 값으로 반올림하거나하지 않습니다. 내부적으로 부동 소수점 arthetic 및 처리 규칙에 따라 소수점 이하 자릿수에 가깝습니다. 표시하려는 자릿수에 상관없이 내부적으로 10 진수 (JS에서 부동 소수점, 이중)를 유지합니다.

표시를 위해 표시하려면 문자열 변환으로 원하는대로 표시의 정밀도를 선택할 수 있습니다. 프레젠테이션은 저장 문제가 아니라 표시 문제입니다.


이것을 시도하십시오 (코드의 주석 참조) :

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

플로팅 할 간단한 자바 스크립트 문자열

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

나를 위해 일하는 해결책은 다음과 같습니다.

parseFloat(value)

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

다른 해결책이 있습니다.

round()대신에 사용할 수 있습니다toFixed()

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

참고 URL : https://stackoverflow.com/questions/4435170/how-to-parse-float-with-two-decimal-places-in-javascript



반응형