とあるシステム開発中に「有効桁数○桁にして、かつ有効桁数以下を四捨五入じゃなくて切り捨てにしたい」という要望をもらったのね。
ほんでPHP+AJAXでの開発だったので、JavaScriptで対応してまえ、とおもったのだけど、有効桁数以下四捨五入のtoPrecision()というメソッドあるけど有効桁数以下切り捨てというメソッドはない。
Google先生にいろいろお聞きしたのだけど、どうもよさげなアイディアがない、ってことで、つくりましたよ。
さぁどうぞ。
/*
* 有効桁数以下切り捨て
* number : 対象数値
* digit : 有効桁数
*/
function toPrecitionFloor (number, digit) {
//number=0だとループしちゃうからちゃんとキャッチしてあげてね
var pow = 0;
do {
if ( String( Math.floor( number* Math.pow(10,pow) ) ).length < digit) {
pow++;
} else {
break;
}
} while (true);
return Math.floor( number * Math.pow(10,pow) ) / Math.pow(10,pow);
}
処理をざっくり言うと、小数点位置をずらしながら有効桁数の位置(=以下切り捨ての位置)を調査して、「小数点以下第n位以下を切り捨て」のアイディアに乗せてみた。
厳密に有効数字と違う値が帰ってこないじゃんコレ?馬鹿なの?っていう突っ込みはナシで。そこまでの厳格なものじゃないのであしからず。厳格にしたいならご自分でどうぞ。