Tôi đang cố gắng phân tích hai giá trị từ một datagrid. Các trường là số và khi chúng có dấu phẩy (ví dụ: 554,20), tôi không thể lấy số sau dấu phẩy. Tôi đã thửparseInt
và parseFloat
. Tôi có thể làm cái này như thế nào?
Tôi đang cố gắng phân tích hai giá trị từ một datagrid. Các trường là số và khi chúng có dấu phẩy (ví dụ: 554,20), tôi không thể lấy số sau dấu phẩy. Tôi đã thửparseInt
và parseFloat
. Tôi có thể làm cái này như thế nào?
Câu trả lời:
Nếu chúng có nghĩa là các giá trị riêng biệt, hãy thử điều này:
var values = "554,20".split(",")
var v1 = parseFloat(values[0])
var v2 = parseFloat(values[1])
Nếu chúng có nghĩa là một giá trị duy nhất (như trong tiếng Pháp, trong đó một nửa được viết 0,5)
var value = parseFloat("554,20".replace(",", "."));
+(string)
thay vì parseString(string)
như được đề xuất bởi @Stev bên dưới. Vì vậy, ví dụ đầu tiên sẽ là v1 = +(values[0]); v2 = +(values[1]);
.
6.000.000
. Chức năng chỉ thay thế phân tách dấu phẩy đầu tiên
Bạn đã bao giờ thử làm điều này? : p
var str = '3.8';ie
alert( +(str) + 0.2 );
+ (chuỗi) sẽ đúc chuỗi thành float.
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(/,/,'.'));
+(str)
giải pháp - parseFloat
bỏ qua các ký tự không hợp lệ sau số, +(str)
trả về NaN
trong các trường hợp đó, đó chính xác là những gì tôi cần.
Thay thế dấu phẩy bằng dấu chấm.
Điều này sẽ chỉ trả lại 554:
var value = parseFloat("554,20")
Điều này sẽ trả về 554.20:
var value = parseFloat("554.20")
Vì vậy, cuối cùng, bạn chỉ cần 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 số nguyên (không có dấu phẩy động). Trong trường hợp của bạn, nó sẽ chỉ trả về 554. Ngoài ra, việc gọi parseInt () trên một số float sẽ không làm tròn số: nó sẽ lấy sàn của nó (số nguyên thấp nhất gần nhất).
Ví dụ mở rộng để trả lời câu hỏi của Pedro Ferreira từ các bình luận:
Nếu trường văn bản chứa hàng ngàn dấu phân cách như trong 1.234.567,99
đó có thể được loại bỏ trước với một dấu chấm khác replace
:
var fValue = parseFloat(document.getElementById("textfield").value.replace(/\./g,"").replace(",","."))
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 hoạt động với dấu chấm
"554.20".float()
> 554.20
typeof "554,20".float()
> "number"
@GusDeCool hoặc bất kỳ ai khác đang cố gắng thay thế hơn một nghìn dấu phân cách, một cách để làm điều đó là thay thế toàn cầu regex : /foo/g
. Chỉ cần nhớ rằng đó .
là một metacharacter, vì vậy bạn phải thoát nó hoặc đặt nó trong ngoặc ( \.
hoặc [.]
). Đây là một lựa chọn:
var str = '6.000.000';
str.replace(/[.]/g,",");
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 giá trị và sau đó nó sẽ điều chỉnh lại dấu phẩy theo 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;
}
Tôi đã có cùng một vấn đề ngoại trừ tôi không biết trước hàng ngàn dấu phân cách và dấu phân cách thập phân là gì. Tôi đã kết thúc việc viết một thư viện để làm điều này. Nếu bạn quan tâm thì đây là: https://github.com/GuillaumeLeclerc/number-parsing
Thử
let str ="554,20";
let float = +str.replace(',','.');
let int = str.split(',').map(x=>+x);
console.log({float,int});