JavaScript에서 문자열을 부동 소수점으로 변환하는 방법은 무엇입니까?


답변:


371

그것들이 별도의 값을 의미한다면, 이것을 시도하십시오 :

var values = "554,20".split(",")
var v1 = parseFloat(values[0])
var v2 = parseFloat(values[1])

단일 값을 의미하는 경우 (예 : 프랑스어와 같이 절반이 0.5로 작성 됨)

var value = parseFloat("554,20".replace(",", "."));

6
천 단위 구분자로 사용되는 쉼표는 어디에 있습니까? 예 : 1234는 1,234로 작성 됨
Chris B

6
쉼표를 제거한 다음 구문 분석 할 수 있습니다. (예 : ""로 교체)
Jesse Rusak 2016 년

7
sconto = parseFloat ( "5,, 5".replace ( ",", "."));와 같이 안전하지는 않습니다. 하나를 최고의 수익률 5는 유효한 숫자하다고 생각합니다,하지만 당신은 0.5 부분을 느슨하게하거나 유효한 숫자가 아닌 고려할 수
max4ever

1
@ max4ever 유효하지 않은 숫자를 자동으로 수락하는 것이 걱정 된다면 아래 @Stev에서 제안하는 +(string)대신 사용할 수 있습니다 parseString(string). 따라서 첫 번째 예는입니다 v1 = +(values[0]); v2 = +(values[1]);.
Jesse Rusak

1
실패, 내 번호가 인 경우 어떻게합니까 6.000.000? 기능은 첫 번째 쉼표 구분 기호 만 교체
GusDeCooL

55

이 작업을 시도한 적이 있습니까? :피

var str = '3.8';ie
alert( +(str) + 0.2 );

+ (string)은 문자열을 float로 캐스팅합니다.

능숙한!

따라서 문제를 해결하기 위해 다음과 같은 작업을 수행 할 수 있습니다.

var floatValue = +(str.replace(/,/,'.'));

7
나는 +(str)해결책을 정말로 좋아합니다 parseFloat. 숫자 뒤에 유효하지 않은 문자를 무시 하고 그 경우에 +(str)반환 NaN합니다.
Alex

34

쉼표를 점으로 바꾸십시오.

554 만 반환합니다 :

var value = parseFloat("554,20")

554.20을 반환합니다 :

var value = parseFloat("554.20")

따라서 결국 다음을 간단히 사용할 수 있습니다.

var fValue = parseFloat(document.getElementById("textfield").value.replace(",","."))

parseInt()부동 소수점이 아닌 정수를 구문 분석하는 데만 사용해야한다는 것을 잊지 마십시오 . 귀하의 경우 554 만 반환합니다. 또한 float에서 parseInt ()를 호출하면 숫자가 반올림되지 않습니다.


의견에서 Pedro Ferreira의 질문에 대답하는 확장 된 예 :

텍스트 필드에 이와 같이 수천 개의 분리 점이 포함되어 있으면 1.234.567,99다른 점으로 미리 제거 할 수 있습니다 replace.

var fValue = parseFloat(document.getElementById("textfield").value.replace(/\./g,"").replace(",","."))

"."는 어떻습니까? 천 단위 구분 기호? 4.554,20처럼 무엇이 돌아 올까요?
페드로 페레이라

16

String 객체를 이와 같이 확장하면

String.prototype.float = function() { 
  return parseFloat(this.replace(',', '.')); 
}

.. 이렇게 실행할 수 있습니다

"554,20".float()
> 554.20

도트와 함께 작동

"554.20".float()
> 554.20

typeof "554,20".float()
> "number"

10
일반적으로 기본 개체 프로토 타입을 수정하는 것은 잘못된 형식으로 간주됩니다. 다른 프레임 워크도 그렇게하려고했지만 기능이 다른 경우 어떻게해야합니까?
phreakhead

3

@GusDeCool 또는 수천 개 이상의 구분 기호를 바꾸려는 사람은 정규식 전역 바꾸기 /foo/g입니다. .메타 문자 임을 기억 하면 이스케이프하거나 대괄호 ( \.또는 [.]) 로 묶어야 합니다. 하나의 옵션이 있습니다 :

var str = '6.000.000';
str.replace(/[.]/g,",");

1
그렇다. 정규 표현식이없는 대체는 한 문자 만 대체한다.
Aukhan

2

이 기능을 사용할 수 있습니다. 쉼표를 ''로 바꾼 다음 값을 구문 분석하고 값을 다시 쉼표로 조정합니다.

function convertToFloat(val) {
        if (val != '') {
            if (val.indexOf(',') !== -1)
                val.replace(',', '');
            val = parseFloat(val);
            while (/(\d+)(\d{3})/.test(val.toString())) {
                val = val.toString().replace(/(\d+)(\d{3})/, '$1' + ',' + '$2');
            }
        }
        return val;
    }


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.