

こんばんは。
タイトルの通り、double型の値を、一桁ずつint型に格納したいのです。
例えば、
double kazu = 123.4
を、
int kurai100 = 1
int kurai10 = 2
int kurai1 = 3
int kurai01 = 4
double kazu = 12.3
を、
int kurai100 = 0
int kurai10 = 1
int kurai1 = 2
int kurai01 = 3
のように格納する関数が欲しいのですが、
どういうふうにやるのが妥当でしょうか。
なんとなく、いったんchar型の配列に変換して、
int型に入れる感じになりそうだとは思うのですが、
double型からchar型にうつす方法がわからないのと、
必ずしも100の位まででなくて、
10の位までしかない場合もあるので、そういう場合、
Char型の配列の添え字がずれるのではと、
悩んでいます。
void henkan(double kazu, &int kurai100, &int kurai10, &int kurai1, &int kurai01)
こういう関数があるといいのですが、どういうふうになるのでしょうか。
使わなかった位には0が入ればいいのですが。
よろしくおねがいします。
No.2ベストアンサー
- 回答日時:
char szNumber[10];
double kazu;
sprintf(szNumber,"%03.1f",kazu);
でdoubleから文字列(char配列)に出来るので、あとは文字を数値に変えれば……
sprintf()で文字列に変換するところまでいきました。
szNumber[10]={1, 2, 3,. , 4}になったとします。
その後これをint kurai100,int kurai10,int kurai1,int kurai0に入れようとするにあたって、char型からint型に変換してやる必要がありますよね。
そこで、atoi()を使うと
kurai100 = atoi(&szNumber[0]);
kurai10 = atoi(&szNumber[1]);
kurai1 = atoi(&szNumber[2]);
kurai01 = atoi(&szNumber[4]);
これで入って欲しいのは、
kurai100=1, kurai10=2, kurai1=3, kurai01=4
なのですが、実際にはatoi()の機能で、
kurai100=123, kurai10=23となってしまいます。
もう一度それを別の文字列に読み込んで、
={1,2,3}
そこからさらに[0]で指定して1だけを取り出した上で、
再度atoi()で変換という方法になったのですが、
もっとうまいやりかたはあるんでしょうか。
しかしとりあえずこれでできたので、
ありがとうございます。
No.5
- 回答日時:
ご質問のような処理をする場合、わざわざ文字列にする必要はありません。
それより、整数値からへんかんする方がずっとかんたんだし、わかりやすい。
int i;
double kazu;
int kazu_i;
int kurai[20];
int n;
kazu_i = (int)(kazu * 10);
n = 0;
while(kazu_i != 0) {
kurai[n] = kazu_i % 10;
kazu_i /= 10;
}
No.4
- 回答日時:
単純に
void henkan(double kazu, int *kurai100, int *kurai10, int *kurai1, int *kurai01)
{
*kurai100=(int)kazu/100;
*kurai10=(int)(kazu-*kurai100*100)/10;
*kurai1=(int)(kazu-*kurai100*100-*kurai10*10);
*kurai01=(int)(kazu*10-*kurai100*1000-*kurai10*100-*kurai1*10);
}
じゃダメなんですかね??
3桁+小数1桁なら正確に出てくるとは思うんですが・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
問題がで書きで申し訳ないので...
-
複数桁10進数の*桁目だけを抽出...
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語での引数の省略方法
-
毎回違う乱数を生成するにはど...
-
windows-findstrの正規表現を使...
-
16進数を入力とするatoi関数...
-
実数の整数部,小数部の取得
-
シグマ公式・・・C言語
-
C言語の問題です。大至急回答お...
-
C言語での奇数の和
-
std::set<int> で、ある値が何...
-
C言語 エラーの原因がわからな...
-
C言語 ポインタ 配列
-
「指定されたキャストは有効で...
-
構造体にたいして、ビット演算...
-
ラップ関数とはどんなものですか?
-
次のプログラムでは、配列yの中...
-
「Aに対するBの割合」と「Aに対...
-
Aの値からBの値を除するとは??
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数桁10進数の*桁目だけを抽出...
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語 エラーの原因がわからな...
-
ラップ関数とはどんなものですか?
-
【C++】関数ポインタの使い方
-
if と配列の組み合わせ
-
(int *)の意味
-
ColorをRGBで指定する方法
-
未解決の外部シンボル _printf...
-
構造体の勉強中です 合計点の高...
-
商と剰余を同時に求める(C言語)
-
C言語で分からないところがあり...
-
式は定数値が必要です」という...
-
C言語での奇数の和
-
課題でつまってます・・・
-
std::set<int> で、ある値が何...
-
int16_t の _t は何?
-
比較回数と交換回数表示について
おすすめ情報