2016-05-03 6 views
-3

jQueryプラグインまたはregex-solutionを使用して、JavaScriptで数値をフォーマットしたり、変更したり、丸めたり、ゼロを追加することなく探しています。数はで行き、戻って3つの規則に従って書式設定されています: - 数千人が をセパレータ - 小数 の数 - 理想のセパレーターここ変更なしでjavascriptで数字を構成する

は、私が探しています何のいくつかの例です:

Thousands: Comma, Decimals: 0, Separator: Point 
Input: 1000 » Output: 1,000 
Input: 100000 » Output: 100,000 

Thousands: Space, Decimals: 2, Separator: Comma 
Input: 1000 » Output: 10,00 
Input: 100000 » Output: 1 000,00 

Thousands: Comma, Decimals: 1, Separator: Point 
Input: 1000 » Output: 100.0 
Input: 100000 » Output: 10,000.0 
+0

変更なし...結果? –

+0

見出しを「変更せずに」に変更しました。私が見つけたすべてのソリューションは、小数点が定義されているときに2つのゼロを追加します。私はすべての数字を追加しないでください。セパレータのみ。 –

+0

負数の場合の書式設定方法 – Gerard

答えて

2

てみてくださいこの機能:

function format(prop) { 
    prop.input = String(prop.input); 
    var input = prop.input, decimals = ''; 
    if (prop.decimals) { 
     input = prop.input.slice(0, -prop.decimals); 
     decimals = prop.separator + prop.input.slice(-prop.decimals); 
    } 
    return input.replace(/(?!^)(?=(...)+$)/g, prop.thousands) + decimals; 
} 

例:

format({ 
    input: 100000, 
    thousands: ' ', 
    decimals: 2, 
    separator: ',' 
}); 
// "1 000,00" 
+0

おかげさしで、本当にありがとうございます。しかし、私が100を入力した場合、私は1,1を得るでしょう、それは1,00でなければなりません。 1200は12,12になります。 –

+0

@HenrikLindqvist。私の悪い、それが今働くかどうか確認してください –

0

私はあなたのための迅速な機能を作った。

function lindqvistFormat(input, thouSep, decimals, decSep) { 
    var inStr = (input * (input < 0 ? -1 : 1)).toFixed(0); 
    while(inStr.length < decimals + 1) inStr = "0" + inStr; 
    var leftPart = inStr.substr(0, inStr.length - decimals), rightPart = decimals ? decSep + inStr.substr(-decimals) : ""; 
    return (input < 0 ? "-" : "") + leftPart.replace(/(?!^)(?=(...)+$)/g, thouSep) + rightPart; 
} 

例:lindqvistFormat(-1234567890, " ", 2, ".")-12 345 678.90になります。

また、要求された小数点以下の桁数の値も処理します。

私はそれがどのように動作し、いくつかのショートカットを使用することは自明ではないことを知っていますが、それは動作します。私は実際にあなたの問題に解決策を提供するので、とにかくそれを投稿することにしました。

EDIT: user6188402の正規表現は、実際にははるかに賢い私の解決策よりも、私が持っていたextLeftPartを必要としないので、私は彼に似て動作するように私の解決策を変更しました。したがって正規表現の部分のクレジットはuser6188402に送られます。 (私の古い解決策は、extLeftPartにダミー文字を埋め込み、長さを3で割り切れるようにしてから、Array.prototype.join(extLeftPart.match(/.{3}/g), thouSep)を使用して、最後にもう一度パディングを取り除いていました。)

関連する問題