弊社の年末年始の営業日についてご案内申し上げます。
年内営業:2025年12月26日(金)まで
年始営業:2026年1月5日(月)より
期間中は何かとご迷惑をおかけいたしますが、何卒ご了承のほど、お願い申し上げます。
日ごろみなさまにご利用いただいている、ORCAのdemo2サーバーのバージョンアップを予定しております。
バージョンアップに伴う、メンテナンスの日程は下記のとおりになります。
2025年12月9日(火) 10:00~12:00
作業時間帯はサーバーへのアクセスができません。
ご不便をおかけいたしますが、何卒ご理解・ご協力のほどよろしくお願い申し上げます。
みなさまは調査画面作成時に、小数点を含む計算をしたら想定外の値になってしまった、そんな経験はありませんか?
例えば、本来は「3」となる計算結果が、「3.0000000000001」のように“妙に長い数値”になってしまうケースです。
実はこれ、ORCA のバグではありません。
原因は、多くのプログラミング言語で使われている 「浮動小数点」 という数値の仕組みにあります。
■浮動小数点とは?
浮動小数点とは、コンピューターが数値を扱うための一般的な方式のひとつで、
ORCA でもこの方式を使って計算を行っています。
この方式の特徴は、「だいたいの値」という点です。
一見きれいな数値 ― たとえば 0.1 や 0.01 ― に見えても、コンピューター内部では きっちりその値を表現できず、わずかな誤差を含んでしまう ことがあります。
そのため、次のような現象が発生する場合があります。
・本当は 3 になるはずが 3.0000000000001 になる
・条件「3以上」で判定したいのに、計算結果が 2.9999999999 となり弾かれてしまう
・小数点以下の桁が不必要に長く表示される
など、ごく小さな誤差ではありますが、集計や条件分岐に使うと意図せぬ動きを引き起こすことがあるため注意が必要です。
そこで今回は、浮動小数点による“見た目のズレ”や“判定のズレ”を防ぐための ORCA Script をご紹介します。
見本はこちら
サンプルスペックのダウンロードは こちら
■今回使うORCA Script
・四捨五入したい値
・小数点以下桁数
・0 埋めの有無(true/false)
を引数として、値をきれいな形に変換します。
|
-----------------------ここからコピペ-----------------------
function round_str($a, $b, $zerofill) { var $ret = "";   ;if ( $b > 0 ) { var $x = round( $a * pow( 10, $b ) ); var $r = right( $x, $b ); var $l = left( $x, length( $x ) - $b ); var $m = match( $r, "0+$" ); if( $m[0] and ! $zerofill ) { $ret = $l << "." << $m[2]; } else { $ret = $l << "." << $r; } } return $ret; } -----------------------ここまでコピペ----------------------- | |
| return round_str((Q92100.N + Q92200.N), Q92300.N, true ); | ←ここに引数を設定 |
入力例:
33 + 0.6(小数点以下 3 桁)
そのまま計算を行うと、計算結果が「33.600000000000001」となります。
ですが、上記Scriptを使用すると、「33.600」となります。
スッキリ意図した形になりましたね。
よければぜひご活用ください!
vol.091へ |
vol.093へ![]() |