2009-03-13 42 views

Trả lời

285

Nếu họ có nghĩa là để được giá trị riêng biệt, hãy thử này:

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

Nếu họ có nghĩa là để trở thành một giá trị duy nhất (như trong tiếng Pháp, nơi một nửa được viết 0,5)

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

Điều gì về nơi bạn có một dấu phẩy được sử dụng như một nghìn seperator? Ví dụ: 1234 được viết dưới dạng 1,234 –

+6

Bạn chỉ có thể xóa dấu phẩy, sau đó phân tích cú pháp đó. (ví dụ: thay thế bằng "") –

+6

nó không an toàn lắm, như sconto = parseFloat ("5,, 5" .replace (",", ".")); trả về 5 hàng đầu để tin rằng đó là một số hợp lệ, nhưng bạn mất phần .5 hoặc bạn có thể coi nó không phải là số hợp lệ – max4ever

26

Thay thế dấu phẩy bằng dấu chấm.

này sẽ chỉ trả lại 554:

var value = parseFloat("554,20") 

này sẽ trở lại 554,20:

var value = parseFloat("554.20") 

Vì vậy, cuối cùng, bạn chỉ có thể sử dụng:

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

Đừng quên rằng parseInt() chỉ nên được sử dụng để phân tích các số nguyên (không có dấu phẩy động). Trong trường hợp của bạn, nó sẽ chỉ trả lại 554. Ngoài ra, gọi parseInt() trên một phao sẽ không làm tròn số: nó sẽ lấy sàn của nó (số nguyên gần nhất thấp hơn).

+0

Còn về "." hàng nghìn dấu phân cách? Như 4.554,20 cái gì sẽ trở lại ...? –

42

Bạn đã bao giờ thử thực hiện việc này chưa? : p

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

+ (chuỗi) sẽ đúc chuỗi thành phao.

Tiện dụng!

Vì vậy, để giải quyết vấn đề của bạn, bạn có thể làm một cái gì đó như thế này:

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

Tôi thực sự thích giải pháp '+ (str)' - 'parseFloat' bỏ qua các ký tự không hợp lệ sau số,' + (str) 'trả về' NaN' trong những trường hợp đó, chính xác là những gì tôi cần. – Alex

+0

Đây có vẻ là câu trả lời hay nhất, tương tự như truyền tới int bằng cách thay đổi ký hiệu hai lần bằng ~, như trong ~~ "45.2" = 45 –

13

Nếu bạn mở rộng đối tượng String như thế này ..

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

.. bạn có thể chạy nó như thế này

"554,20".float() 
> 554.20 

công trình với dấu chấm cũng

"554.20".float() 
> 554.20 

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

Mặc dù thường được coi là biểu mẫu không đúng để sửa đổi nguyên mẫu đối tượng cơ sở. Điều gì sẽ xảy ra nếu một khung công tác khác cũng cố gắng thực hiện điều đó nhưng chức năng khác nhau? – phreakhead

2

@GusDeCool hoặc bất kỳ ai khác đang cố gắng thay thế nhiều hơn một nghìn dấu tách, một cách để làm là thay thế toàn bộ regex: /foo/g. Chỉ cần nhớ rằng . là một metacharacter, vì vậy bạn phải thoát khỏi nó hoặc đặt nó trong dấu ngoặc đơn (\. hoặc [.]). Dưới đây là một tùy chọn:

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

yea, thay thế không có regex chỉ thay thế một lần xuất hiện của ký tự. – Aukhan

0

Tôi có cùng một vấn đề ngoại trừ tôi không biết trước dấu phân cách hàng nghìn và dấu tách thập phân. Tôi đã viết thư viện để làm điều này. Nếu bạn quan tâm đến nó ở đây là: https://github.com/GuillaumeLeclerc/number-parsing

3

Bạn có thể sử dụng chức năng này.Nó sẽ thay thế dấu phẩy bằng '' và sau đó nó sẽ phân tích cú phápFlaot giá trị và sau đó nó sẽ điều chỉnh lại dấu phẩy trong giá trị.

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; 
    } 
Các vấn đề liên quan