ライブラリ

「ライブラリ」というほど大それたものではありませんが,
自分がプログラムを書くに当たって,自作したソースを公開しておきます.
よろしければ参考にしてください.
このままソースに埋没してくれても結構ですが,その際はメールをいただけると幸いです.


Double型小数の表示                          
PalmのAPIは小数点以下の数字も扱えるようになっているのですが(固定,浮動小数点とも),それを画面に表示する方法がよくわかりません.(このあたりのマニュアルは不親切に感じますが,いかがでしょうか?)
数字を文字列に変換するAPIも存在しますが,これは整数にしか変換されず,小数点以下は切り捨てられてしまいます.
「BSA Calculator」のように,結果が1〜2程度のもので,小数点以下を切り捨てられてはたまりません.
そこでDouble型を画面に表示する関数を作成しました.

原理は簡単です.
@ まず小数点以下を切り捨て,整数部分のみ文字列に変換します.
A 文字列の最後に小数点を付加.
B 表示する数字(小数点以下も含む)から,@の整数部分を引きます(これで小数点以下のみ残ります).
C Bの数字を10倍しする.
D 整数部分のみ抜き出し,文字列に追加します.以下同様に,小数点以下を1桁ずつ文字列に変換してゆきます.


書式
  PutUnderPoint ( UInt8 X , UInt8 Y , double value , UInt8 keta );

    UInt8 X      : 表示するX座標
    UInt8 Y      : 表示するY座標
    double value : 表示する変数
    UInt8 keta     : 表示する小数点以下の桁数   

    戻り値     : なし

 なぜ表示する桁数が必要かというと,何桁目まで必要かがプログラム側からは判断できないからです.
 また,2進数では小数は近似表示になるため,ほとんどの場合が循環小数または無限小数になってしまいます.よって表示される値は代入値と異なる場合があります.また,桁数より外側の数値については切り捨てていますので,注意してください.

変数の型の宣言がおかしいかもしれません(ちょっと自信がありません).もしコンパイラがエラーを出したら,適宜なおしてください.


 ソースはこちら



★フィールドからの小数の取り込み
フィールドに入力された数字は数字ではなく,文字列として処理されています.これを数字(double型)に変換します.
そのままStrIAToI()を使うと結果は整数になってしまいます.かといって,文字列をdouble型に変換してくれる関数はありません.
そこで自作の関数を作りました.

原理は以下の通りです.
@まず小数点以上の部分を一時的に別の文字列に転写します.
A次に文字列内の小数点を探します.見つけたら,これは別の文字列には転写しません.
B小数点以下の文字列を,先ほどの文字列の後ろに転写していきます.この際,何文字転写したかをカウントしておきます.
C文字列の終端(\0)に来るまで転写を繰り返します.
D文字列をそのまま整数に変換し,10^(小数点以下の文字数)で割ります.


書式

double GetUnderPoint ( char *ptr );

char *ptr    :変換する文字列
戻り値      : 変換された数値

汎用変数に i を使うあたりはBASICの癖が抜けなくていけません. ^ ^;

あまり小数点以下の桁数の長い数字はうまく変換されないと思います(やったことがないのでわかりませんが).
補正前の数字がdouble型の桁数を超してしまうと値がおかしくなるはずです.
このあたりは適当に入力フィールドを調整してください.



ソースはこちら