JavaScriptで小数点以下2桁の数値をフォーマットする


571

私の数値を小数点以下2桁に丸める次のコード行があります。しかし、私は次のような数値を取得しています。10.8、2.4など。これらは小数点以下2桁の私の考えではないので、以下をどのように改善できますか?

Math.round(price*Math.pow(10,2))/Math.pow(10,2);

10.80、2.40などの数値が欲しいのですが、jQueryを使用しても問題ありません。


1
あなたのコードはまさに私が探していたものです(小さなJSONファイルのために浮動小数点の精度を小数点以下7桁に減らすために)スピードのためにMath.powをスキップしますval = Math.round(val * 10000000)/ 10000000);
Pawel

現在受け入れ答えは間違いなく、広い範囲の値の間違った結果を与える数字に固有の不正確さを(悪化のおかげで0.5650.5751.005)、私は再び見てお勧めすることができ、この答え、彼らが正しいなっていますか、?
TJクラウダー2016年

たぶん、あなたには、JavaScript用のsprintfライブラリに含めるstackoverflow.com/questions/610406/...
ティロ

小数点以下の桁数をシフトして丸める方法で正しく丸めた後、このnumber.toFixed(x)方法を使用して、必要な量のゼロを含む文字列に変換できます。たとえば、クロスブラウザメソッドで丸め1.341.3次にゼロを1つ追加し、1.3.toFixed(2)(getを使用して"1.30")文字列に変換します。
エドワード

回答:


999

固定小数点表記を使用して数値をフォーマットするには、単にtoFixedメソッドを使用できます。

(10.8).toFixed(2); // "10.80"

var num = 2.4;
alert(num.toFixed(2)); // "2.40"

toFixed()文字列を返すことに注意してください。

重要:toFixedは90%の時間を丸めないことに注意してください。丸められた値を返しますが、多くの場合、機能しません。

例えば:

2.005.toFixed(2) === "2.00"

更新:

現在では、Intl.NumberFormatコンストラクタを使用できます。これはECMAScript国際化API仕様(ECMA402)の一部です。それは持っているかなり良いブラウザのサポートをしてもIE11含めて、それがされて完全にNode.jsのサポートに

const formatter = new Intl.NumberFormat('en-US', {
   minimumFractionDigits: 2,      
   maximumFractionDigits: 2,
});

console.log(formatter.format(2.005)); // "2.01"
console.log(formatter.format(1.345)); // "1.35"

代わりにtoLocaleString、内部的にIntlAPI を使用するメソッドを使用することもできます。

const format = (num, decimals) => num.toLocaleString('en-US', {
   minimumFractionDigits: 2,      
   maximumFractionDigits: 2,
});


console.log(format(2.005)); // "2.01"
console.log(format(1.345)); // "1.35"

このAPIは、千単位の区切り記号、通貨記号など、さまざまなフォーマットオプションを提供します。


17
すべてのブラウザで一貫して機能しない、つまり(0.09).toFixed(1);IE8で0.0を与える
ajbeaven

41
fixedは丸めません。最初に行うことができます:(Math.round(0.09))。toFixed(1);
2012年

32
@rekans:これは間違っています。Math.Round(0.09)戻ります0、これは常に与えるので0.0...
クリス・

28
これはほとんどの状況で悪い考えです。場合によっては、数値を文字列または浮動小数点数に変換します。
アッシュブルー

80
ここで@AshBlueに同意する必要があります...これは値の表示をフォーマットする場合にのみ安全です。さらに計算するとコードが壊れる可能性があります。それ以外の場合Math.round(value*100)/100は、2DPの方がうまく機能します。
UpTheCreek

98

これは古いトピックですが、Googleの上位の結果と提供されるソリューションは同じ浮動小数点小数点の問題を共有しています。MDNのおかげで、私が使用する(非常に一般的な)関数は次のとおりです。

function round(value, exp) {
  if (typeof exp === 'undefined' || +exp === 0)
    return Math.round(value);

  value = +value;
  exp = +exp;

  if (isNaN(value) || !(typeof exp === 'number' && exp % 1 === 0))
    return NaN;

  // Shift
  value = value.toString().split('e');
  value = Math.round(+(value[0] + 'e' + (value[1] ? (+value[1] + exp) : exp)));

  // Shift back
  value = value.toString().split('e');
  return +(value[0] + 'e' + (value[1] ? (+value[1] - exp) : -exp));
}

ご覧のとおり、これらの問題は発生していません。

round(1.275, 2);   // Returns 1.28
round(1.27499, 2); // Returns 1.27

この総称には、いくつかの優れた機能もあります。

round(1234.5678, -2);   // Returns 1200
round(1.2345678e+2, 2); // Returns 123.46
round("123.45");        // Returns 123

OPの質問に答えるには、次のように入力する必要があります。

round(10.8034, 2).toFixed(2); // Returns "10.80"
round(10.8, 2).toFixed(2);    // Returns "10.80"

または、より簡潔で汎用性の低い関数の場合:

function round2Fixed(value) {
  value = +value;

  if (isNaN(value))
    return NaN;

  // Shift
  value = value.toString().split('e');
  value = Math.round(+(value[0] + 'e' + (value[1] ? (+value[1] + 2) : 2)));

  // Shift back
  value = value.toString().split('e');
  return (+(value[0] + 'e' + (value[1] ? (+value[1] - 2) : -2))).toFixed(2);
}

あなたはそれを呼び出すことができます:

round2Fixed(10.8034); // Returns "10.80"
round2Fixed(10.8);    // Returns "10.80"

さまざまな例とテスト(@ tj-crowderに感謝!):


1
これを行う簡単な方法はありませんか?ES6が助けに?
zero_cool 2017

MDNポリフィルを投稿していただきありがとうございます。リンクされたMDNページでは、ポリフィルはありません。なぜ削除されたのか...
ホリー王

43

私は通常、これを個人用ライブラリに追加します。いくつかの提案と@TIMINeutronソリューションも使用し、小数部長に適応できるようにすると、これが最適です。

function precise_round(num, decimals) {
   var t = Math.pow(10, decimals);   
   return (Math.round((num * t) + (decimals>0?1:0)*(Math.sign(num) * (10 / Math.pow(100, decimals)))) / t).toFixed(decimals);
}

報告された例外に対して機能します。


2
rigid_round(1.275,2)は1.27ですか?
allenhwkim

2
@Imre戻り値を(Math.round(num * Math.pow(10、decimals))/ Math.pow(10、decimals))。toFixed(2);に変更します。そしてあなたはもはやその問題を抱えていないでしょう。
dkroy 2013

6
2番目の関数がピックアップされた場合に「sign」と「dec」をどこで宣言しますか?
Ady Ngom 2014年

2
IEでミスサイン方式の回避策を追加しました:gist.github.com/ArminVieweg/28647e735aa6efaba401
Armin

1
@Arminこの修正により、Safariでも機能するようになります。オリジナルの機能はSafariでは機能しませんでした。
デイブ

19

以前の回答にコメントを追加できないのはなぜですか(多分、私は絶望的に盲目であることがわかっています)、Miguelの回答を使用して解決策を考え出しました:

function precise_round(num,decimals) {
   return Math.round(num*Math.pow(10, decimals)) / Math.pow(10, decimals);
}

そして、その2つのコメント(@bighostkimと@Imreから):

  • precise_round(1.275,2)1.28が返されない問題
  • precise_round(6,2)6.00を返さない問題(彼が望んだとおり)。

私の最終的な解決策は次のとおりです:

function precise_round(num,decimals) {
    var sign = num >= 0 ? 1 : -1;
    return (Math.round((num*Math.pow(10,decimals)) + (sign*0.001)) / Math.pow(10,decimals)).toFixed(decimals);
}

ご覧のとおり、「修正」を少し追加する必要がありました(実際にはそうではありませんが、Math.roundは損失があるため、jsfiddle.netで確認できます-これは、「修正」する方法を知っている唯一の方法です。 " それ)。既にパディングされた数値に0.001を追加するため、10進数値の右側に13 0秒を追加します。したがって、安全に使用できます。

その後、.toFixed(decimal)常に正しい形式(小数点以下の桁数)で数値を出力するように追加しました。

これでほぼ終わりです。うまく使用してください;)

編集:負の数の「修正」に機能を追加しました。


2
「修正」はほとんど安全ですが、たとえばprecise_round(1.27499,2)1.28も返すようになりました...それMath.roundは不可逆ではありません。コンピュータが浮動小数点値を内部的に格納する方法は、次のとおりです。基本的に、データが関数に到達する前に、いくつかの値で失敗する運命にあります:)
Imre

@Imre、あなたは絶対的に正しいです。そのため、この0.001がそこで何をしているのかを説明します。誰かがそれを「より正確に」したい、または削除したい場合に備えて(フロートあたり2Mバイトのスーパーコンピュータがある場合、ここでは誰もそうは思いません) ;)
tfrascaroli 2013

1
実際、言語仕様は数値に64ビットを使用することに関してかなり具体的であるため、スーパーコンピュータを使用しても使用しても何も変わりません:)
Imre

0.001の場合、小数部の長さに応じて多くのゼロを追加することで置き換えることができます。so ..
ミゲル

15

100%にするための1つの方法は、小数点以下2桁の数値を取得することです。

(Math.round(num*100)/100).toFixed(2)

これにより丸めエラーが発生する場合は、Jamesのコメントで説明されているように、以下を使用できます。

(Math.round((num * 1000)/10)/100).toFixed(2)

6
これは、これを行うための最良かつ最も簡単な方法です。ただし、浮動小数点演算により、1.275 * 100 = 127.49999999999999となるため、丸めに小さなエラーが発生する可能性があります。これを修正するには、(1.275 * 1000)/ 10 = 127.5のように、1000を掛けて10で割ります。以下: var answer = (Math.round((num * 1000)/10)/100).toFixed(2);
ジェームズ・グールド

(Math.round((1.015 * 1000)/ 10)/ 100).toFixed(2)でも1.01が得られますが、1.02にすべきではありませんか?
gaurav5430

14

toFixed(n)は、小数点以下n長を提供します。toPrecision(x)はx全長を提供します。

以下の方法を使用してください

// Example: toPrecision(4) when the number has 7 digits (3 before, 4 after)
    // It will round to the tenths place
    num = 500.2349;
    result = num.toPrecision(4); // result will equal 500.2

そして、あなたが数を固定したい場合は

result = num.toFixed(2);

うまく動作しません...数値num = 50.2349の場合、toPrecision(3)を記述して50.2を取得する必要があります
PiotrCzyżMay

その例として、必要に応じて変更できます@PiotrCzyż–
Syed Umar Ahmed

5

この問題の正確な解決策が見つからなかったため、自分で作成しました。

function inprecise_round(value, decPlaces) {
  return Math.round(value*Math.pow(10,decPlaces))/Math.pow(10,decPlaces);
}

function precise_round(value, decPlaces){
    var val = value * Math.pow(10, decPlaces);
    var fraction = (Math.round((val-parseInt(val))*10)/10);

    //this line is for consistency with .NET Decimal.Round behavior
    // -342.055 => -342.06
    if(fraction == -0.5) fraction = -0.6;

    val = Math.round(parseInt(val) + fraction) / Math.pow(10, decPlaces);
    return val;
}

例:

function inprecise_round(value, decPlaces) {
  return Math.round(value * Math.pow(10, decPlaces)) / Math.pow(10, decPlaces);
}

function precise_round(value, decPlaces) {
  var val = value * Math.pow(10, decPlaces);
  var fraction = (Math.round((val - parseInt(val)) * 10) / 10);

  //this line is for consistency with .NET Decimal.Round behavior
  // -342.055 => -342.06
  if (fraction == -0.5) fraction = -0.6;

  val = Math.round(parseInt(val) + fraction) / Math.pow(10, decPlaces);
  return val;
}

// This may produce different results depending on the browser environment
console.log("342.055.toFixed(2)         :", 342.055.toFixed(2)); // 342.06 on Chrome & IE10

console.log("inprecise_round(342.055, 2):", inprecise_round(342.055, 2)); // 342.05
console.log("precise_round(342.055, 2)  :", precise_round(342.055, 2));   // 342.06
console.log("precise_round(-342.055, 2) :", precise_round(-342.055, 2));  // -342.06

console.log("inprecise_round(0.565, 2)  :", inprecise_round(0.565, 2));   // 0.56
console.log("precise_round(0.565, 2)    :", precise_round(0.565, 2));     // 0.57


2
ありがとう。これをテストするのは簡単です:jsfiddle.net/lamarant/ySXuF。値を返す前にtoFixed()を値に適用して、戻り値の末尾に正しい数のゼロを追加しています。
ラマラント2013

value = 0,004990845956707237では機能せず、inprecise_round(value、8)は0,00499085を返しますが、0,00499084を返す必要があります
MERTDOĞAN18年

3

@heridevと私はjQueryで小さな関数を作成しました。

次に試すことができます:

HTML

<input type="text" name="one" class="two-digits"><br>
<input type="text" name="two" class="two-digits">​

jQuery

// apply the two-digits behaviour to elements with 'two-digits' as their class
$( function() {
    $('.two-digits').keyup(function(){
        if($(this).val().indexOf('.')!=-1){         
            if($(this).val().split(".")[1].length > 2){                
                if( isNaN( parseFloat( this.value ) ) ) return;
                this.value = parseFloat(this.value).toFixed(2);
            }  
         }            
         return this; //for chaining
    });
});

デモオンライン:

http://jsfiddle.net/c4Wqn/


1
DOM要素とjQueryをミックスに追加することは問題の範囲外と思われますが、貢献に感謝します。
クリス月

keyupイベントは非常に悪く見え、スクリプトで何かを追加してもアクティブにならないため、キーアップイベントをリッスンしないでください。私はむしろinputイベントを聞きたいです。これはちらつき効果を作成せず、JSでフィールドにアクセスしたときにも発火します
Le 'nton

3

浮動小数点値の問題は、固定量のビットで無限の(連続した)値を表現しようとしていることです。当然のことながら、プレイにはある程度の損失が必要であり、いくつかの値で噛まれるでしょう。

コンピュータが1.275を浮動小数点値として格納する場合、それが1.275、1.27499999999999993、または1.27500000000000002のいずれであったかを実際には記憶しません。これらの値は、小数点以下2桁に四捨五入した後、異なる結果になるはずですが、コンピューターでは浮動小数点値として格納した後はまったく同じに見え、失われたデータを復元する方法がないため、結果は異なります。それ以降の計算では、そのような不正確さが蓄積されるだけです。

したがって、精度が重要な場合は、最初から浮動小数点値を回避する必要があります。最も簡単なオプションは

  • 献身的なライブラリを使用する
  • 文字列を使用して値を格納および渡します(文字列操作を伴う)
  • 整数を使用します(たとえば、実際の値の100分の1の量を渡すことができます。たとえば、ドルの金額ではなくセントの金額)

たとえば、整数を使用して100分の1の数を格納する場合、実際の値を見つける関数は非常に簡単です。

function descale(num, decimals) {
    var hasMinus = num < 0;
    var numString = Math.abs(num).toString();
    var precedingZeroes = '';
    for (var i = numString.length; i <= decimals; i++) {
        precedingZeroes += '0';
    }
    numString = precedingZeroes + numString;
    return (hasMinus ? '-' : '') 
        + numString.substr(0, numString.length-decimals) 
        + '.' 
        + numString.substr(numString.length-decimals);
}

alert(descale(127, 2));

文字列では、丸めが必要になりますが、それでも管理できます。

function precise_round(num, decimals) {
    var parts = num.split('.');
    var hasMinus = parts.length > 0 && parts[0].length > 0 && parts[0].charAt(0) == '-';
    var integralPart = parts.length == 0 ? '0' : (hasMinus ? parts[0].substr(1) : parts[0]);
    var decimalPart = parts.length > 1 ? parts[1] : '';
    if (decimalPart.length > decimals) {
        var roundOffNumber = decimalPart.charAt(decimals);
        decimalPart = decimalPart.substr(0, decimals);
        if ('56789'.indexOf(roundOffNumber) > -1) {
            var numbers = integralPart + decimalPart;
            var i = numbers.length;
            var trailingZeroes = '';
            var justOneAndTrailingZeroes = true;
            do {
                i--;
                var roundedNumber = '1234567890'.charAt(parseInt(numbers.charAt(i)));
                if (roundedNumber === '0') {
                    trailingZeroes += '0';
                } else {
                    numbers = numbers.substr(0, i) + roundedNumber + trailingZeroes;
                    justOneAndTrailingZeroes = false;
                    break;
                }
            } while (i > 0);
            if (justOneAndTrailingZeroes) {
                numbers = '1' + trailingZeroes;
            }
            integralPart = numbers.substr(0, numbers.length - decimals);
            decimalPart = numbers.substr(numbers.length - decimals);
        }
    } else {
        for (var i = decimalPart.length; i < decimals; i++) {
            decimalPart += '0';
        }
    }
    return (hasMinus ? '-' : '') + integralPart + (decimals > 0 ? '.' + decimalPart : '');
}

alert(precise_round('1.275', 2));
alert(precise_round('1.27499999999999993', 2));

この関数は0から離れて最も近い値に丸めますがIEEE 754は浮動小数点演算のデフォルトの動作として、最も近い値に丸めることを推奨しています。そのような変更は読者のための練習問題として残されています:)


3

ここに簡単なものがあります

function roundFloat(num,dec){
    var d = 1;
    for (var i=0; i<dec; i++){
        d += "0";
    }
    return Math.round(num * d) / d;
}

のように使う alert(roundFloat(1.79209243929,4));

Jsfiddle


2

10進数値を丸めtoFixed(x)、予想される桁数に使用します。

function parseDecimalRoundAndFixed(num,dec){
  var d =  Math.pow(10,dec);
  return (Math.round(num * d) / d).toFixed(dec);
}

コール

parseDecimalRoundAndFixed(10.800243929,4)=> 10.80 parseDecimalRoundAndFixed(10.807243929,2)=> 10.81


2

切り捨て

function round_down(value, decPlaces) {
    return Math.floor(value * Math.pow(10, decPlaces)) / Math.pow(10, decPlaces);
}

切り上げする

function round_up(value, decPlaces) {
    return Math.ceil(value * Math.pow(10, decPlaces)) / Math.pow(10, decPlaces);
}

最も近いラウンド

function round_nearest(value, decPlaces) {
    return Math.round(value * Math.pow(10, decPlaces)) / Math.pow(10, decPlaces);
}

https://stackoverflow.com/a/7641824/1889449https://www.kirupa.com/html5/rounding_numbers_in_javascript.htmを統合しました。ありがとうございます。


2

/**
 * MidpointRounding away from zero ('arithmetic' rounding)
 * Uses a half-epsilon for correction. (This offsets IEEE-754
 * half-to-even rounding that was applied at the edge cases).
 */

function RoundCorrect(num, precision = 2) {
	// half epsilon to correct edge cases.
	var c = 0.5 * Number.EPSILON * num;
//	var p = Math.pow(10, precision); //slow
	var p = 1; while (precision--> 0) p *= 10;
	if (num < 0)
		p *= -1;
	return Math.round((num + c) * p) / p;
}

// testing some +ve edge cases
console.log(RoundCorrect(1.005, 2));  // 1.01 correct
console.log(RoundCorrect(2.175, 2));  // 2.18 correct
console.log(RoundCorrect(5.015, 2));  // 5.02 correct

// testing some -ve edge cases
console.log(RoundCorrect(-1.005, 2));  // -1.01 correct
console.log(RoundCorrect(-2.175, 2));  // -2.18 correct
console.log(RoundCorrect(-5.015, 2));  // -5.02 correct


2

これが私の1行のソリューションです。 Number((yourNumericValueHere).toFixed(2));

ここで何が起こるかです:

1)最初に、.toFixed(2)小数点以下を四捨五入する数値に適用します。これは値を数値から文字列に変換することに注意してください。したがって、Typescriptを使用している場合は、次のようなエラーがスローされます。

「タイプ 'string'はタイプ 'number'に割り当てることができません」

2)数値を戻す、または文字列を数値に変換するには、単にNumber()その「文字列」値に関数を適用します。

詳しくは、以下の例をご覧ください。

例: 小数点以下5桁までの金額があり、小数点以下2桁まで短縮したい。私はそれをそのようにします:

var price = 0.26453;
var priceRounded = Number((price).toFixed(2));
console.log('Original Price: ' + price);
console.log('Price Rounded: ' + priceRounded);


1

入れて、次のいくつかのグローバルスコープで:

Number.prototype.getDecimals = function ( decDigCount ) {
   return this.toFixed(decDigCount);
}

してみてください

var a = 56.23232323;
a.getDecimals(2); // will return 56.23

更新

つまりtoFixed()、小数点以下の桁数でしか機能しないことに注意してください。0-20つまりa.getDecimals(25)、javascriptエラーが生成される可能性があるため、追加のチェックを追加できることを考慮してください。

Number.prototype.getDecimals = function ( decDigCount ) {
   return ( decDigCount > 20 ) ? this : this.toFixed(decDigCount);
}



1

参照によりこの応答を使用する:https : //stackoverflow.com/a/21029698/454827

動的な小数を取得する関数を作成します。

function toDec(num, dec)
{
        if(typeof dec=='undefined' || dec<0)
                dec = 2;

        var tmp = dec + 1;
        for(var i=1; i<=tmp; i++)
                num = num * 10;

        num = num / 10;
        num = Math.round(num);
        for(var i=1; i<=dec; i++)
                num = num / 10;

        num = num.toFixed(dec);

        return num;
}

ここでの作業例:https : //jsfiddle.net/wpxLduLc/


1

parse = function (data) {
       data = Math.round(data*Math.pow(10,2))/Math.pow(10,2);
       if (data != null) {
            var lastone = data.toString().split('').pop();
            if (lastone != '.') {
                 data = parseFloat(data);
            }
       }
       return data;
  };

$('#result').html(parse(200)); // output 200
$('#result1').html(parse(200.1)); // output 200.1
$('#result2').html(parse(200.10)); // output 200.1
$('#result3').html(parse(200.109)); // output 200.11
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<div id="result"></div>
<div id="result1"></div>
<div id="result2"></div>
<div id="result3"></div>


1

これらの例を使用しても、数値1.005を丸めようとするとエラーが発生します。解決策は、Math.jsなどのライブラリまたはこの関数を使用することです。

function round(value: number, decimals: number) {
    return Number(Math.round(value + 'e' + decimals) + 'e-' + decimals);
}

1

数か月前にこの投稿からいくつかのアイデアを得ましたが、ここでの回答も他の投稿/ブログからの回答もすべてのシナリオを処理できませんでした(たとえば、負の数やテスターが見つけた「ラッキーナンバー」)。結局、テスターは以下のこの方法で問題を見つけませんでした。私のコードのスニペットを貼り付けます:

fixPrecision: function (value) {
    var me = this,
        nan = isNaN(value),
        precision = me.decimalPrecision;

    if (nan || !value) {
        return nan ? '' : value;
    } else if (!me.allowDecimals || precision <= 0) {
        precision = 0;
    }

    //[1]
    //return parseFloat(Ext.Number.toFixed(parseFloat(value), precision));
    precision = precision || 0;
    var negMultiplier = value < 0 ? -1 : 1;

    //[2]
    var numWithExp = parseFloat(value + "e" + precision);
    var roundedNum = parseFloat(Math.round(Math.abs(numWithExp)) + 'e-' + precision) * negMultiplier;
    return parseFloat(roundedNum.toFixed(precision));
},

コードのコメントもあります(すみません、すべての詳細を忘れてしまいました)...今後の参考のために、ここに回答を投稿します。

9.995 * 100 = 999.4999999999999
Whereas 9.995e2 = 999.5
This discrepancy causes Math.round(9.995 * 100) = 999 instead of 1000.
Use e notation instead of multiplying /dividing by Math.Pow(10,precision).

0

修飾子の問題を修正します。 10進数のみをサポートします。

$(function(){
  //input number only.
  convertNumberFloatZero(22); // output : 22.00
  convertNumberFloatZero(22.5); // output : 22.50
  convertNumberFloatZero(22.55); // output : 22.55
  convertNumberFloatZero(22.556); // output : 22.56
  convertNumberFloatZero(22.555); // output : 22.55
  convertNumberFloatZero(22.5541); // output : 22.54
  convertNumberFloatZero(22222.5541); // output : 22,222.54

  function convertNumberFloatZero(number){
	if(!$.isNumeric(number)){
		return 'NaN';
	}
	var numberFloat = number.toFixed(3);
	var splitNumber = numberFloat.split(".");
	var cNumberFloat = number.toFixed(2);
	var cNsplitNumber = cNumberFloat.split(".");
	var lastChar = splitNumber[1].substr(splitNumber[1].length - 1);
	if(lastChar > 0 && lastChar < 5){
		cNsplitNumber[1]--;
	}
	return Number(splitNumber[0]).toLocaleString('en').concat('.').concat(cNsplitNumber[1]);
  };
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>


0
(Math.round((10.2)*100)/100).toFixed(2)

それはもたらすはずです: 10.20

(Math.round((.05)*100)/100).toFixed(2)

それはもたらすはずです: 0.05

(Math.round((4.04)*100)/100).toFixed(2)

それはもたらすはずです: 4.04


0

/*Due to all told stuff. You may do 2 things for different purposes:
When showing/printing stuff use this in your alert/innerHtml= contents:
YourRebelNumber.toFixed(2)*/

var aNumber=9242.16;
var YourRebelNumber=aNumber-9000;
alert(YourRebelNumber);
alert(YourRebelNumber.toFixed(2));

/*and when comparing use:
Number(YourRebelNumber.toFixed(2))*/

if(YourRebelNumber==242.16)alert("Not Rounded");
if(Number(YourRebelNumber.toFixed(2))==242.16)alert("Rounded");

/*Number will behave as you want in that moment. After that, it'll return to its defiance.
*/


0

これは非常にシンプルで、他の機能と同様に機能します。

function parseNumber(val, decimalPlaces) {
    if (decimalPlaces == null) decimalPlaces = 0
    var ret = Number(val).toFixed(decimalPlaces)
    return Number(ret)
}

toFixed()は数値でのみ呼び出すことができ、残念ながら文字列を返すため、これにより双方向ですべての解析が行われます。文字列または数値を渡すことができ、毎回数値が返されます!parseNumber(1.49)を呼び出すと1が得られ、parseNumber(1.49,2)を呼び出すと1.50が得られます。最高のように!


0

.toPrecision()メソッドといくつかのカスタムコードを使用して、int部分の長さに関係なく、常にn番目の10進数に切り上げることもでき ます。

function glbfrmt (number, decimals, seperator) {
    return typeof number !== 'number' ? number : number.toPrecision( number.toString().split(seperator)[0].length + decimals);
}

また、より使いやすいプラグインにすることもできます。



-2

私はこの問題を解決し、使用または適応できる非常に簡単な方法を見つけました:

td[row].innerHTML = price.toPrecision(price.toFixed(decimals).length

-4

100%動作しています!!! それを試してみてください

<html>
     <head>
      <script>
      function replacePonto(){
        var input = document.getElementById('qtd');
        var ponto = input.value.split('.').length;
        var slash = input.value.split('-').length;
        if (ponto > 2)
                input.value=input.value.substr(0,(input.value.length)-1);

        if(slash > 2)
                input.value=input.value.substr(0,(input.value.length)-1);

        input.value=input.value.replace(/[^0-9.-]/,'');

        if (ponto ==2)
	input.value=input.value.substr(0,(input.value.indexOf('.')+3));

if(input.value == '.')
	input.value = "";
              }
      </script>
      </head>
      <body>
         <input type="text" id="qtd" maxlength="10" style="width:140px" onkeyup="return replacePonto()">
      </body>
    </html>


SOへようこそ。この回答方法を読み、ガイドラインに従って回答してください。
2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.