JavaScriptの10進数の10進数の四捨五入 -- javascript フィールド と math フィールド と decimal フィールド 関連 問題

Rounding to the nearest hundredth of a decimal in JavaScript












14
vote

問題

日本語

数値を表すために変数を使用してJavaScriptで簡単な数学をしています。 これが私のコードの例です:

<事前> <コード> var ones = 0; var fives = 0; function results (){ _fives = (fives * 5); var res = (_fives + ones); document.innerHTML = res; }

これは全規模ではなく、基本的に私はユーザーが1セントのコインから100ドルの請求書の請求書とコインの量を入力しています。コードは、請求書の金額を価値のある金額に乗算します。これは問題ではありません。 私の結果のいくつかについての何らかの理由で、それは1.89999999999997のような10進数を示しています。これが起こっている方法がわからない。

これを変更する方法は、10進数の10進数の最も近い百分の一にラウンドされますか?

たとえば1.89999999997を示すのではなく、1.90を表示するだけです。 実際にはこれは大きな問題ではありません。これは私が自分自身を丸めることができる個人的なことですが、今後の参考のためにこれを行う方法を学ぶのはうれしいです。

英語

I'm doing simple math in JavaScript using variables to represent the numbers. Here is an example of my code:

var ones = 0; var fives = 0; function results (){     _fives = (fives * 5);     var res = (_fives + ones);     document.innerHTML = res; } 

This isn't the full code but basically I'm having the user enter the amount of bills and coins from 1 cent coins up to $100 bills. The code multiplies the amount of bills to the amount the bill is worth. This is no problem works just fine... For some reason on some of my results it shows a decimal like 1.899999999997 not sure how this is happening.

Is there a way to change this so it round to the nearest hundredth of a decimal?

For example instead of it showing 1.89999999997 it would just show 1.90 in reality this isn't a big issue. This is a personal thing that I can just round it myself however it would be nice to learn how to do this for future reference.

</div
        
     
     

回答リスト

21
 
vote

update :MDNは実際には浮動小数点不正確さを回避する10進丸めの素晴らしい例。それらの方法は、OPに基づいて常に切り上げるように修正することができます。


オリジナル(やや間違っている)答え

<事前> <コード> $p2

edit :私は完全に質問を読みませんでした。私たちは通貨を話しているので、おそらくそれを丸くしたいと思う:

<事前> <コード> $p3
 

UPDATE: MDN actually has a great example of decimal rounding that avoids floating point inaccuracies. Their method can be modified to always round up, based on the OP.


ORIGINAL (SOMEWHAT INCORRECT) ANSWER

//to round to n decimal places function round(num, places) {     var multiplier = Math.pow(10, places);     return Math.round(num * multiplier) / multiplier; } 

EDIT: I didn't read the question completely. Since we're talking currency, we probably want to round it up:

//to round up to two decimal places function money_round(num) {     return Math.ceil(num * 100) / 100; } 
</div
 
 
         
         
2
 
vote

実際にこの方法はすべて問題なく機能しません。測定値を一定の数字に丸めるのに似たものをやっています。

私の場合私は測定の平均と標準偏差、0.20812345967 +/- 0.0031647859のようなものです。明らかに追加の重要な数字は無意味なので、それを0.208 +/- 0.003として書きたいです。浮動小数点数学をするとき、私は入手します 0.20800000000000002 +/- 0.003

通常は正しくラウンドしますが、ベース10の10進数はバイナリに正確に保存できないため、このようながらくたがあります。

代わりに、文字列形式のソリューションを探すつもりです

 

Actually this method does NOT work in all cases. I'm doing something similar to round a measured value to a certain number of digits.

In my case I have a a mean and standard deviation of a measurement, something like 0.20812345967 +/- 0.0031647859. Now obviously the extra significant digits are meaningless, so I'd like to write it as 0.208 +/- 0.003. When I do the floating point math, I get 0.20800000000000002 +/- 0.003

Usually this rounds correctly, but because base ten decimal numbers sometimes can't be exactly stored in binary, you get crap like this.

Instead, I'm going to look for a string format solution

</div
 
 
2
 
vote

これは私が働いているアプリの1つで使うことに決めたものです!

 <コード> const roundToHundredth = (value) => {    return Number(value.toFixed(2));  };    console.log(roundToHundredth(1.98723232))  console.log(roundToHundredth(3.14159265359))  console.log(roundToHundredth(2.67528))  
 

This is what I personally decided to use in one of the apps I'm working on!

const roundToHundredth = (value) => {    return Number(value.toFixed(2));  };    console.log(roundToHundredth(1.98723232))  console.log(roundToHundredth(3.14159265359))  console.log(roundToHundredth(2.67528))
</div
 
 
 
 
0
 
vote

これは遅く、ドルの短い短いことがあることを知っています、しかし私はこのようなものを探していました、そしてこの質問は私がMath.round機能

を調べました

与えられた価値を首尾よく四捨五入したことを思い付きました。 0.07は0.05になります。 23.45は23.45になる。 1006.32は1006.30になります。

<事前> <コード> <script> function rounder() { var exampleInput = $("#inputId").val(); $("#output").html(((Math.round(((Math.round(exampleInput*100)/5)*5)/5)*5)/100).toFixed(2)); } </script>

初​​心者である、このコードをより効率的にする方法があることを確信しています。

 

I know that this is likely a day late and a dollar short, but I was also looking for something like this, and this question led me to look into the Math.round functionality

I come up with this which successfully rounds a given value to the nearest 5th, 100th. So 0.07 becomes 0.05. 23.45 becomes 23.45. 1006.32 becomes 1006.30.

<script> function rounder() { var exampleInput = $("#inputId").val(); $("#output").html(((Math.round(((Math.round(exampleInput*100)/5)*5)/5)*5)/100).toFixed(2)); } </script> 

Being a novice, I am certain that there is a way to make this code more efficient.

</div
 
 
0
 
vote

大規模部門のための立ち上げツール。 「10進」を異なる値に割り当てることによって、異なる小数点サイズのサイズを処理するように調整できます。

<事前> <コード> const roundToWholeNumber = (num, decimal = 100000) => { const _roundingHelper = (val, decimalPlace) => { return Math.round(val * decimalPlace) / decimalPlace; } while(decimal > 1){ num = _roundingHelper(num, decimal) decimal = decimal / 10 } return Math.round(num) } roundToWholeNumber(5.44444555)
 

Rounding up tool for large decimals. Can be adjust to handle different decimals sizes by assigning 'decimal' a different value.

const roundToWholeNumber = (num, decimal = 100000) => {      const _roundingHelper = (val, decimalPlace) => {          return Math.round(val * decimalPlace) / decimalPlace;      }      while(decimal > 1){         num = _roundingHelper(num, decimal)         decimal = decimal / 10     }      return Math.round(num)    } roundToWholeNumber(5.44444555) 
</div
 
 
0
 
vote

私は実際に私が取り組んでいるベクトルプロジェクトのための丸めのための解決策を実装するために働いてきたので、これを扱ってきました。私は実際にこの年をとって驚いた(2011)<a href="http://www.javascripter.net/faq/rounding.htm" rel="> javascripter.net リソースが作成されていません特に<コード> Math.round( // ... を以前に説明しているので、特に。

ビットを追加しました。また、<コード> .toFixed() を使用しています(ただし、この段階では、この段階で、個人的にはあまり気にしないゼロのゼロは倒れますが):< / P> <事前> <コード> const round = (number, places) => { let rounder = '1'; for (let i = 0; i < places; i++) { rounder += '0'; } return (Math.round(number * rounder) / rounder).toFixed(places); };

効率や冗長性に関して上記の問題があると確信しています。しかし、私のポイントは、 Math.round() がそれを必要とするものをしています。反復後、上記で変換をスローする必要があるかもしれません。

他の提案された解決策のいくつかよりも読みやすくするのはずっと簡単なことです。

 

I've actually been dealing with this as I've been working to implement a solution for rounding for a vectors project I am working on. I'm actually surprised this older (2011) javascripter.net resource hasn't made it, particularly as it is using Math.round( // ... mentioned previously.

I've added a bit to it, also make use of .toFixed() (though this will lop off any trailing zeroes, which I am not too worried about, at this stage, personally):

 const round = (number, places) => {    let rounder = '1';     for (let i = 0; i < places; i++) {        rounder += '0';    }     return (Math.round(number * rounder) / rounder).toFixed(places); };  

I'm sure there is some issue with the above in terms of efficiency or redundancy; but my point is that Math.round() still does what you need it to. Might need to throw a conversion in the above, after the iteration.

It's also a heck of a lot easier to read than some of the other proposed solutions.

</div
 
 
0
 
vote

これは、次のようなものをやっているときにJavaScriptの問題であることが注目されています:

<事前> <コード> 0.1 + 0.5 = 0.600000000001 or 0.599999999998

この問題の解決策は、固定精度および丸めモードを持つJavasRIPTライブラリの1つを使用することです。あなたは詐欺リンクを試すことができます。これがコード例:

です <事前> <コード> // Initialization var bn = new BigNumbers({ precision: 20, // fixed precision 20 digits after decimal separator roundingMode: BigNumbers.RoundingMode.HALF_UP // rounding mode is Half Up }); var number1 = bn.of('15'); var number2 = bn.of('12'); var divideResult = number1.divide(number2); // result "1.25" var multiplyResult = divideResult.multiply(1/2); // result "0.625" var roundingToTwoDecimalResult = multiplyResult.toPrecision(2); // result "0.63"

(詐欺師に壊れた後またはハッキングされた後に除去された外部リンク - 10月)

 

This is known problem of JavaScript when you doing something like:

0.1 + 0.5 = 0.600000000001 or 0.599999999998 

The solution for this problem is to use one of JavasSript library with fixed precision and rounding modes. You can try scam link. Here is code example:

// Initialization var bn = new BigNumbers({     precision: 20, // fixed precision 20 digits after decimal separator      roundingMode: BigNumbers.RoundingMode.HALF_UP // rounding mode is Half Up });  var number1 = bn.of('15'); var number2 = bn.of('12');   var divideResult = number1.divide(number2); // result "1.25" var multiplyResult = divideResult.multiply(1/2); // result "0.625" var roundingToTwoDecimalResult = multiplyResult.toPrecision(2); // result "0.63" 

( external links provided removed after becoming broken or hacked by scammers - Oct 2020)

</div
 
 

関連する質問

701  C#でdecimalをdoubleに変換する方法  ( How to convert decimal to double in c sharp ) 
<コード> Track-Bar を使用して、<コード> Form の不透明度を変更します。 これは私のコードです: <コード> decimal trans = trackBar1.Value / 5000; this.Opacity = trans; ...

2  必死に単純なPython Deciman  ( Desperately simple python decimal ) 
こんにちは私は助けが必要です。 XXXXX.YYYYYYYYYYYYYYのような形式でフロート番号を計算したいです。 Floatの代わりに10進数を使用する必要があることを学びました 私はたくさん試してみました、そして私はたくさん検索しましたが、私はまだ次の簡...

1  バイナリ番号を乗算し、減算し、分割すると、答えが間違っています  ( Multiplying subtracting and dividing binary numbers give wrong answers ) 
バイナリ電卓アプリを作成しています。 ビルドタイムの​​問題はありませんが、アプリではバイナリ数を追加するだけで、正しい回答、乗算、差し引き、および分割しません。 分割 - すべての回答= 1(1010-0001 = 1; 10101010-1010 = 1...

1  地域10進偏移補足入力[閉鎖]  ( Regional decimal seperator input ) 
閉鎖。この質問はもっと焦点を絞ったにする必要があります。現在答えを受け付けていません。 この質問を改善したいですか?このPOST...

12  従属プロジェクトにおける複製プロトコル実装  ( Duplicate protocol implementations in dependent projects ) 
私は私のElixirプロジェクトにおけるプロトコル実装の統合に問題がある。より具体的には、 Ecto と Gold と呼ばれる単純なプロジェクトを使用しています(たくさんのATMは関係ありません)。問題は、どちらも(<コード> Ecto および<コード> Go...

3  数字で特定のビットを設定します  ( Setting specific bits in a number ) 
var d = 7; バイナリ:7 =(111) 私がやりたいことは、処分で右から1または0まで2位を設定することです、 と10進値を返します。 例えば、2番目の1から0にしたい場合は、プロセス後に5、を返す必要があります。 5 =(101) これをJa...

13  Pythonのランダム10進数  ( Random decimal in python ) 
ランダムな <コード> decimal.Decimal インスタンス?ランダムモジュールは、小数点以下の浮動小数点を返す浮動小数点を返すようです。 ...

2  xamarin.auth auth 000と10進数の区切り文字を持つエントリ  ( Xamarin forms entry with auto thousand and decimal separator ) 
私は、PT-BR実際の通貨(999.999,99)を表す数値キーボードでXamarin.Formsエントリを持っています。数字キーボードに数字を入力すると、入力している間にカンマ(10進数を表す)とドット(千)を自動的に追加する必要があります。 この目標を達成...

0  String Stringを0から2の小数点ASP.NETで始まりますか?  ( Convert string start with 0 to 2 decimal place asp net ) 
私はこの文字列を持っています: <事前> <コード> Dim value as String = "0.11209176170341301" とこのコードを使用して、文字列を2か所で10進数に変換しようとしました。 <事前> <コード> Dim value...

-1  Java小数点  ( Java decimal points ) 
私の質問は: 小数点以下の数字と数の後に数回の数字を印刷する方法。 <事前> <コード> public class Strings { public static void main(String args[]) { double number = 1...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有