LCDに小数点以下の数字を表示する方法

このQ&Aのポイント
  • PIC18F14K50を使用したLCD電圧計で、double型の数字が表示されない問題について質問です。
  • PCでは表示できるが、LCDでは表示されないという現象に困っています。
  • 他にも小数点以下の数字を表示させる方法があれば、教えていただきたいです。
回答を見る
  • ベストアンサー

LCDに小数点以下の数字を表示する方法

現在、PIC18F14K50を用いたLCD電圧計をつくっています。 sprintfを使って文字列にして表示させようとしたのですが、int型は数字が表示されるのに double型は数字が表示されません。 具体的には int temp = ReadADC(); sprintf(buf,"VOLTAGE=%d",temp); LCD_str(buf); ↑これがうまく表示されて int temp = ReadADC(); double data = (double)(temp); sprintf(buf,"VOLTAGE=%.2lf",data); LCD_str(buf); ↑これが数字の部分が表示されません。 PC(コマンドプロンプト)ではしっかり表示できているのでプログラムは間違っていないと思うのですが、なぜなのでしょうか? また、ほか小数点以下の数字を表示させる方法がありましたら教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

マイコン用だと、パソコン用って、単純に比較できません。 マイコン用C言語のsprintfのマニュアルをよく調べてください。 ・書式文字列の説明に 「%fはdoubleに対応した固定小数点形式」というようなことは書かれていますか? .2とかの表現もマニュアルにちゃんと書かれてますか? ・こちらの件は大丈夫ですか? http://www.kijineko.co.jp/tech/superstitions/printf-format-for-double.html ・「数字が表示されません」とは、具体的にどんな表示になるのでしょう? ・表示桁は足りてますね?

関連するQ&A

  • 小数点付の数字の桁数を揃える

    >10 を $suu=sprintf("%03d",$suu); このようにして3桁に揃えると >010 ですが、小数ありの数字を上の方法で桁数を揃えると >10.5 だった場合、小数点以下が無視され、 >010 と表示されます。それを、 >010.5 のように小数つきで桁数を揃えたいのですが、 どうすればいいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Perl
  • 固定幅フィールドのテキストデータをifstreamを使って読み込む方法

    固定幅フィールドのテキストデータをifstreamを使って読み込む方法 について教えてください。 計算結果の出力ファイルに1行につき8カラム、20カラム、10カラムのデータがあるとします。 例えば 1.2345671.2345678912345678911.23456789 このデータ行には 1.234567(8カラム幅) 1.234567891234567891(20カラム幅) 1.23456789(10カラム幅) の3つの固定小数点の数字が書かれています。 上記例のように3つ(複数)の数字が必ずしもホワイトスペース区切りにはなっていないものとします。 これをC++標準ライブラリのifstream や stringstreamを用いて読み込む場合、どのような記述をしなければならないのでしょうか? たとえば、 int main(int argc, char** argv) { double data[3]; char buf[BUFSIZ]; ifstream ifs( argv[1] ); // argv[1] には上記データが書かれたファイル名が入っているとします。 stringstream str; while( !ifs.eof() ) { if( !ifs.getline( buf, BUFSIZ, '\n' ) ) break; str << buf; str >> setw(8) >> data[0] >> setw(20)>> data[1] >> setw(8) >> data[2]; } cout << data[0] << " " << data[1] << " " << data[2] << endl; return 0; } のような書き方だと、以下のように出力されてしまい、幅を指定しているsetw()が効いていません。 1.23457 0.234568 0.234568 恐らく、'.'がセパレータとして使われて読み込まれているものと思います。 sscanf( buf, "%8lf%20lf%10lf", &data[0], &data[1], &data[2] ); を使うしか方法が無いのでしょうか? 開発環境は ubuntu上のg++ 4.4.3 です。

  • 小数の表示が・・・。

    初歩的な質問で申し訳ないです。 「2個の整数値を標準入力装置(キーボード)から読み込み、その平均値を計算して結果を標準出力装置(ディスプレイ)に出力するというプログラムを書きなさい。小数以下1桁を表示すること。」 という問題を考えていたのですが、上手くいきません。 intじゃダメということはわかるのですが、floatやdoubleにしたら答えがおかしくなります。 intで割り切れる数字だったらこれでいいみたいですが割り切れない奴を小数1桁表示ができません。 どうすべきでしょうか? #include <stdio.h> main() { int a,b,c; printf("整数a:"); scanf("%d",&a); printf("整数b:"); scanf("%d",&b); c=(a+b)/2; printf("平均値は%dです。",c); }

  • 差し込み印刷での小数点表示について

    マイクロソフト2010での差し込み印刷で困っています。 エクセルの数字のデータをワードで差し込み印刷しようとすると、小数点以下が10桁くらい表示されてしまいます。  エクセルのデータをセルの設定で文字列に変更しても、数字にして小数点を1桁に設定しても同じです。  小数点第1位まで表示させるにはどうしたらいいでしょう? 初心者なので、できればわかり易い回答をお願いいたします。

  • データバインドで小数点以下の 0 を表示したい

    データバインド機能を使用して以下のようなCSVを表示しようとすると、 2行目のrateが 97 と小数点以下が省略された表示になってしまいます。 これを 97.0 と表示する方法はあるのでしょうか? count:INT,rate:FLOAT 106 ,98.5 102 ,97.0 123 ,88.2 ※ ソート機能を使用しているため、文字列としての使用は避けたいです。 IEのバージョンは 6.0.2800.1106 です。

  • エクセルの小数点以下の表示について

    エクセルの小数点以下の表示について エクセルについて教えてください。 海外の子会社の財務諸表を日本用に変換するため、エクセルを用いて計算しています。 BS、PL、CRが別々のシート(ファイルは一緒)にあるとします。 PLの当期純利益は、CRの当期製品製造原価の数字を受けて算定され、例えばこの数字が 12,345.67だったとします。 この数字が正しいかどうか、そのPLシートの一部に子会社データの当期純利益金額を 入れ、上記の数値と違っていたら差額が出るようになっています。 入力も間違っていなく、手入力で入れた当期純利益金額も12,345.67であるにも関わらず 差額として0.00がでます。 よくよくみてみると、この0.00のずっとしたに数字が入っており(0.000000000278のような) どうしてこんなことになるのか皆目見当がつきません。 もちろん、入力自体も小数点以下第2位までですし、見た目であっているのに差額表示されるのが 腑に落ちません。 この直し方をご存知の方、教えてくださいますよう、よろしくお願いいたします。 ※わかりづらい文章で申し訳ありません。不明な点があれば質問をお願いいたします。

  • 浮動小数点演算を固定小数点演算へ変換する

    あるプログラムの処理を高速化するために浮動小数点数を固定小数点数に変換したいので、皆様の力を貸してください。 以下のようなプログラムがあります。 ------------------------------------------------------------- #define A 0.105 int main(){ double y; double a,b; double t1,t2 t1 = A * a; t2 = t1 * t1; y = t2 * b; printf("y = %lf\n",y); return 0; } ------------------------------------------------------------- a,bが入力でそれぞれ0~6000,0~0.004の値を取ることが分かっています。また、yは出力であり許容誤差は3以下となっています。 上記のプログラムを固定小数点数で記述しなおすとどのようになりますか。 各変数の型はshortでお願いします。

  • 小数点以下の切捨てにつきまして

    佐藤と申します。 いつも拝見させて頂き、参考にさせて頂いております。 小数点について質問させて頂きます。 単価と数量、割引率を入力とし、収益率と合計金額を算出しようと思っております。 合計金額はごく普通の計算式で問題ありませんでしたが、収益率を小数点第2位(以降切捨て)で算出出来ておりません。 自分なりに色々と調べ、BigDecimalを使えば小数点を表示する事が出来るとの事ですが、計算式では使用することが出来ませんでした。 計算結果を小数点以下で表示することは可能でしょうか? 分かる方がいらっしゃれば、是非ご教授下さい。 宜しくお願い致します。 import java.io.*; //入力ストリームクラスのインポート定義 import java.math.BigDecimal; public class kadai12{ public static void main(String args[]) throws IOException{ //キーボードからの入力等 BufferedReader buf = new BufferedReader(new InputStreamReader(System.in)); //入力データバッファの定義&代入 String check; char w0; int w1=0; int w2=0; int w3=0; int num; // System.out.print("1"); //読込チェック=NULLならば処理を終了させる while(((check = buf.readLine())!=null)){ char[] src = check.toCharArray(); String[] work = check.split(","); int a=0; //入力ファイルチェック1 try{ num=Integer.parseInt(work[1]); }catch(Exception e){ System.out.print("2桁目が数値ではありません"); return; } //入力ファイルチェック2 try{ num=Integer.parseInt(work[2]); }catch(Exception e){ System.out.print("3桁目が数値ではありません"); return; } //入力ファイルチェック3 try{ num=Integer.parseInt(work[3]); }catch(Exception e){ System.out.print("4桁目が数値ではありません"); return; } //w0=名称 w1=単価 w2=数量 w3=割引率 w0=src[0]; w1=Integer.parseInt(work[1]); w2=Integer.parseInt(work[2]); w3=Integer.parseInt(work[3]); //合計金額算出 n=0; n=w1*w2; //収益率算出 BigDecimal n2=new BigDecimal("0.00"); n2=n*w3/n; System.out.println(check); System.out.println(n2 + "=" + n + "*" + w3 + "/" + n); System.out.println(n + "=" + w1 + "*" + w2); } } }

  • sprintf関数での文字列変換について

    マイコンにて、 C言語で浮動小数点の数値を表示するプログラムを作成しているのですが、 PRINT_OUT("123.456"); のように、文字列を直接指定した場合は正しく表示されるのですが、 sprintf()関数を用いて、浮動小数点を文字列に変換した場合、 buf char[10]; sprintf(buf,"%lf",123.456); PRINT_OUT(buf); とした場合はプログラムが暴走?(恐らく配列破壊を起こしていると 思われますが、)してしまい、上手く動作しません。 (但し、整数の場合は正常に動作します。) そこで、質問させていただきたいのですが、 "123.456"のように直接文字列を指定した場合と、浮動小数点123.456 をsprintf()関数を用いて文字列に変換した"123.456"の書式に何か 違いはあるのでしょうか?よろしくお願い致します。

  • LCD表示プログラムで誤表示が解決できない

    pic16F84AにS-10551D(秋月)をつないでキャラクタ表示をしようとしていますが50%くらい誤まって表示してしまい解決策が有りません。 プログラムはアッセンブラでMPLAB IDEv8.60を使用 電波新聞社のPICマイコン完全マスターを参考 にしています。データ長4bitのイニシャライズも本やLCD添付資料のままでは表示しませんでした。 LCDパネルの問題かマイコンソフトの問題かの区別も出来ていません。 ちなみにソースを変更してSC1602BS 16*2行のLCDパネルでは正しく表示出来ます。 S-10551Dは16桁1行の一番安いパネルですが使えず捨てるのはくやしいので質問しました。同じような経験をされて解決された事があればアドバイス願います。 最終的にはLCDにバッテリーの充放電量を表示できる充放電コントローラーを作るのが目的です。