2011-10-24 27 views
6

Tôi đang xác thực số thập phân bằng JavaScript. Chỉ cần sử dụng NaNCó chức năng JS không để tìm giá trị trước và sau dấu thập phân

var a = 12345.67 Có chức năng javascript nào để nhận số hoặc giá trị trước và sau dấu thập phân.

before() should return 1234 
after() should return 67 

Vui lòng không đề xuất chuỗi con!

+0

một câu hỏi đơn giản. những người khác nhau câu trả lời khác nhau. đây là thành công của SO. tuyệt vời :-) – user987880

Trả lời

19
var a = 12345.67; 

alert(a.toString().split(".")[0]); ///before 
alert(a.toString().split(".")[1]); ///after 

Đây là một fiddle đơn giản http://jsfiddle.net/qWtSc/


gợi ý zzzzBov là này

Number.prototype.before = function() { 
    var value = parseInt(this.toString().split(".")[0], 10);//before 
    return value ? value : 0; 
} 

Number.prototype.after = function() { 
    var value = parseInt(this.toString().split(".")[1], 10);//after 
    return value ? value : 0; 
} 

Cách sử dụng

alert(a.before()); ///before 
alert(a.after()); ///after 
+0

Cảm ơn. nhưng tôi nghĩ rằng sẽ có một số chức năng số. điều này sẽ làm việc anyway nhưng chức năng chuỗi này nếu bạn vây bất kỳ chức năng số xin vui lòng đề nghị – user987880

+0

@ user987880, bạn chỉ có thể mở rộng 'Number.prototype' để thêm các chức năng cần thiết. – zzzzBov

+0

@ user987880 đã chỉnh sửa câu trả lời của tôi với đề xuất của zzzzBov. –

2
var decimalPlaces = 2;  
var num = 12345.673 
var roundedDecimal = num.toFixed(decimalPlaces); 

var intPart = Math.floor(roundedDecimal); 
var fracPart = parseInt((roundedDecimal - intPart), 10); 

//or 

var fractPart = (roundedDecimal - intPart) * Math.pow(10, decimalPlaces); 
+0

Họ muốn fracPart là 67, chứ không phải .67. – jfriend00

+0

hmmm jfriend tìm thấy cái ác trong đó câu trả lời tốt :-) – user987880

+0

@ user987880 Thêm một số mã -approached từ một góc độ khác nhau :) – evilone

7

before thật dễ dàng. Nó chỉ là một hoạt động vòng xuống.

var before = function(n) { 
    return Math.floor(n); 
}; 

after khó xử lý chuỗi hơn. Tôi có nghĩa là làm thế nào bạn sẽ xử lý after(Math.PI)? Bạn không thể giữ số nguyên với số chữ số vô hạn sau khi tất cả.

Nhưng với một số xử lý chuỗi rất dễ dàng, chỉ cần biết nó sẽ không được chính xác do những kỳ quan của toán học dấu chấm động.

var after = function(n) { 
    var fraction = n.toString().split('.')[1]; 
    return parseInt(fraction, 10); 
}; 
+0

Vote Up đòi hỏi 15 danh tiếng! Vì vậy, chỉ cần cảm ơn cho bây giờ :-) – user987880

+0

Nếu bạn muốn thập phân sau - (tức là 1.123 = 0.123) bạn chỉ có thể làm 'n - Math.floor (n)' –

2

Chơi tắt của câu trả lời khác ... và bạn muốn có một phiên bản 'số' .. vẫn dễ dàng nhất để chuyển đổi nó thành một chuỗi và làm việc tắt chức năng chia ...

function getNatural(num) { 
    return parseFloat(num.toString().split(".")[0]); 
} 
function getDecimal(num) { 
    return parseFloat(num.toString().split(".")[1]); 
} 
var a = 12345.67; 

alert(getNatural(a)); ///before 
alert(getDecimal(a)); ///after 

http://jsfiddle.net/rlemon/qWtSc/1/

0

Thật không may là không có cách nào để có được phần phe một cách đáng tin cậy bằng cách sử dụng các hàm toán học, bởi vì các vòng tròn khá lẻ thường xảy ra, tùy thuộc vào công cụ Javascript được sử dụng. Điều tốt nhất cần làm là chuyển đổi nó thành một chuỗi và sau đó kiểm tra xem các kết quả có theo ký hiệu thập phân hoặc khoa học hay không.

Number.prototype.after = function() { 
    var string = this.toString(); 
    var epos = string.indexOf("e"); 
    if (epos === -1) { // Decimal notation 
     var i = string.indexOf("."); 
     return i === -1 ? "" : n.substring(i + 1); 
    } 
    // Scientific notation 
    var exp = string.substring(epos + 1) - 0; // this is actually faster 
               // than parseInt in many browsers 
    var mantix = n.string.substring(0, epos).replace(".", ""); 
    if (exp >= -1) return mantix.substring(exp + 1); 
    for (; exp < -1; exp++) mantix = "0" + mantix; 
    return mantix; 
} 
0

Để tìm đếm/chiều dài của ký tự sau dấu chấm:

var a = 12345.67; 
var after_dot = (a.toString().split(".")[1]).length; 
var before_dot= (a.toString().split(".")[0]).length; 
Các vấn đề liên quan