2009-07-22 70 views
6

Tôi có một loạt các texfield, mà tôi muốn định dạng như tiền tệ. Tốt hơn, điều này sẽ được thực hiện trên bay nhưng ít nhất là onblur. Ý tôi là định dạng tiền tệ là 349507 -> 349.507 đô la. Có thể không?Làm cách nào để định dạng văn bản được nhập vào một trường văn bản HTML như tiền tệ?

Tôi thích các giải pháp HTML/CSS/JS hơn, vì tôi cần ít giải thích hơn. Tôi không quen thuộc chút nào với jQuery.

Bất kỳ trợ giúp nào được đánh giá cao.
Mike

Trả lời

5

kết quả đầu tiên trong một tìm kiếm Google cho "tiền tệ định dạng javascript"

http://www.web-source.net/web_development/currency_formatting.htm

function CurrencyFormatted(amount) 
{ 
    var i = parseFloat(amount); 
    if(isNaN(i)) { i = 0.00; } 
    var minus = ''; 
    if(i < 0) { minus = '-'; } 
    i = Math.abs(i); 
    i = parseInt((i + .005) * 100); 
    i = i/100; 
    s = new String(i); 
    if(s.indexOf('.') < 0) { s += '.00'; } 
    if(s.indexOf('.') == (s.length - 2)) { s += '0'; } 
    s = minus + s; 
    return s; 
} 
11

Dưới đây là một số mã tôi đã viết một thời gian dài trước đây để định dạng một số bằng dấu phẩy. Ví dụ: formatNumber(349507, 0, 2, true)"349,507.00".

// Reformats a number by inserting commas and padding out the number of digits 
// and decimal places. 
// 
// Parameters: 
//  number:  The number to format. All non-numeric characters are 
//     stripped out first. 
//  digits:  The minimum number of digits to the left of the decimal 
//     point. The extra places are padded with zeros. 
//  decimalPlaces: The number of places after the decimal point, or zero to 
//     omit the decimal point. 
//  withCommas: True to insert commas every 3 places, false to omit them. 
function formatNumber(number, digits, decimalPlaces, withCommas) 
{ 
     number  = number.toString(); 
    var simpleNumber = ''; 

    // Strips out the dollar sign and commas. 
    for (var i = 0; i < number.length; ++i) 
    { 
     if (".".indexOf(number.charAt(i)) >= 0) 
      simpleNumber += number.charAt(i); 
    } 

    number = parseFloat(simpleNumber); 

    if (isNaN(number))  number  = 0; 
    if (withCommas == null) withCommas = false; 
    if (digits  == 0) digits  = 1; 

    var integerPart = (decimalPlaces > 0 ? Math.floor(number) : Math.round(number)); 
    var string  = ""; 

    for (var i = 0; i < digits || integerPart > 0; ++i) 
    { 
     // Insert a comma every three digits. 
     if (withCommas && string.match(/^\d\d\d/)) 
      string = "," + string; 

     string  = (integerPart % 10) + string; 
     integerPart = Math.floor(integerPart/10); 
    } 

    if (decimalPlaces > 0) 
    { 
     number -= Math.floor(number); 
     number *= Math.pow(10, decimalPlaces); 

     string += "." + formatNumber(number, decimalPlaces, 0); 
    } 

    return string; 
} 

Bạn có thể sử dụng nó trên một handler onblur sự kiện như vậy:

<input type="text" onblur="this.value = '$' + formatNumber(this.value, 0, 0, true)" /> 

Đó sẽ thêm dấu phẩy để số lượng và tát một dấu đô la ở mặt trước.

+0

Cảm ơn bạn, John. Tôi đã sử dụng phương pháp này trong ứng dụng để định dạng bay cho trường tiền tệ. Rất dễ đọc! +1 –

+0

-1 Nó có lỗi và không hoạt động với số kết thúc bằng .9999, ví dụ: định dạng "1879.9999" là 1.879,10 (!) –

+0

Nó không phải là lỗi, đó là do thiết kế. Nếu bạn đã đặt decimalPlaces thành 4, bạn đã có ".9999". – emrahgunduz

Các vấn đề liên quan