【Javascrpt】計算に誤差が出る時の解決方法
【Javascrpt】
計算に誤差が出る時の解決方法
「Javascript」だけに限らず、
PCなどで数字を計算すると、
小数点以下に結構な誤差が出ます。
小数点以下の数字に「1」を足して計算をしていくと、
「1」ではなく、「0.9」だったりする。
答えから、小数点以下を切り捨てると、
ずっと同じ数字になることがあります。
小数点以下の数字を含む計算をするときは、
少し注意が必要。
小数点を含む計算ではなく、
整数にしてから計算して、
その後、必要な小数点に戻すと誤差が出ない計算になる。
詳しい計算方法は、下記をご覧ください。
小数点以下の計算方法
「Javascript」の「Math」オブジェクトの中には、
数学関連のメソッドが格納されています。
その中でも、小数点以下を含む計算には、
切り捨て | |
Math.floor(数字) |
小数点以下を切り捨てるメソッド。
var a = Math.floor( 1.6789123 ) ;
a = 1
|
| |
切り上げ | |
Math.ceil(数字) |
小数点以下の数字があれば、切り上げるメソッド。
var a = Math.ceil( 1.1234567 ) ;
a = 2
|
| |
四捨五入 | |
Math.round(数字) |
小数点以下が「0.5」以上の場合は切り上げ、
小数点以下が「0.5」未満の場合は切り捨て。
var a = Math.round( 4.7123 ) ;
a = 5
|
| |
などがあります。
各メソッドの引数に、
小数点以下の数字を入れるだけなので簡単に実行できます。
小数点以下の数字を取り扱うサンプルコード
切り捨て
var a = Math.floor( 1.6789123 ) ;
a = 1
切り上げ
var a = Math.ceil( 1.1234567 ) ;
a = 2
四捨五入
var a = Math.round( 4.7123 ) ;
a = 5
Back
小数点以下を残す計算方法
小数点第n位までを残したい場合の方法は、
「JavaScript」には、そのメソッドはないので、
一度残したい小数点n位を、1桁になるようにします。
その後、小数点以下を「Math.floor」で切り捨てて、
そして、元の小数点に戻すことで、
小数点n位までの切り捨てが可能になります。
小数点以下を残す切り捨てのサンプルコード
小数点第n位までを残したい場合、JavaScriptにはそのような機能がないので、こちら側でオリジナルの計算処理を作る必要があります。下記は切り捨ての例です。
小数点2位まで残す場合
let a = Math.floor( 1.23456789 * 100 )/100 ;
↓
a = 1.23
小数点5位まで残す場合
let a = Math.floor( 1.23456789 * 100000 )/100000 ;
↓
a = 1.23456
Back
小数点以下の数字を作る時の計算方法
プログラムで小数点以下の数字を作成・計算すると、
結構な誤差が生まれてしまうので、
「小数点以下の数字」を作成するときは、
小数点以下の数字のない「整数」で計算してから、
その数字を割って、小数点以下の数字部分を作ると、
正確な数字が作れる。
小数点以下に、「1」を加えると、
「1」ではなく、「0.986732」などの「1」に満たない数字を加えて計算したりする。
「1」に満たない数字を加えても、「1」から「2」にはならないので、
その都度、小数点以下の「切り上げ」「四捨五入」などが必要になってくる。
Back