- ベストアンサー
数値にウエイトをかけたい方法
- 数値にウエイトをかける方法は、個々の数値を分解し、左から順番にウエイトをかけることです。
- 具体的には、与えられた数値を文字列として扱い、文字列を個々の数値に分解します。
- そして、ウエイトを掛けた値を分割後の文字列格納変数に保存します。
- みんなの回答 (2)
- 専門家の回答
関連するQ&A
- Informixで文字列を数値型に
こんにちは。 当方、Linux7.3+アプリケーション(DB:Informix)を使用しています。 文字列を数値に変換するSQLに悩まされています。 内容 01/01/08からなる文字列と20080101と手動入力される数値を比較する事が最終目標です。 当方が試みている方向は、 01/01/08をSUBSTRING()で20080101に成型し、数値比較をしたい、と思っています。 SUBSTRING()で、文字列型で20080101までできるのですが、数値型にCASTが出来ません。 検討した関数は、下記の通りですが、構文エラーとなり、実装できません。 お助け下さい。 CAST(20080101) as INTEGER TO_NUMBER(20080101) INT(20080101) CONVERT(20080101)
- ベストアンサー
- その他(データベース)
- 数値を文字列として結合した結果を数値に変換する
お世話になっております。 プログラムで、文字を結合した結果を数値に変換する処理にて 処理を高速化できる記述方法があるか質問させてください。 ・やりたいこと 複数の数値を文字列として結合した結果を数値型に高速で変換したい。 ・現在のコード(考え方 C#にて) 今、以下のように数値変換しているのですが、 これ以外の書き方で、スマートな方法はないでしょうか? ※結果がわかりやすいように変数はその都度宣言しています。 int i1 = "10"; int i2 = "2"; string sConcat = i1.ToString() + i2.ToString() ; // "102" // To Int int convertedInt = int.Parse( sConcat ) ; //102 // To Hex int convertedHex = Convert.ToInt32( sConcat , 16 ); // 0x102 数値を文字にして結合して・・・またキャストというのが 無駄なような気がしています。 すみませんが、良い方法があればご教授ください。
- ベストアンサー
- その他(プログラミング・開発)
- C#で数値を抽出したい
0,2,3,3,5,6, という文字列があったとしまして、これを左の数値からint型配列にひとつひとつ格納したいのですが、どうやればいいかわかりません。 int[0]=0 int[1]=2 ... int[5]=6 どなたか教えてください!
- 締切済み
- C・C++・C#
- ■int型の数値から数字文字への変換について
はじめまして。専門学生のhide1978と申します。 今回、以下のような問題に取り組んでいるのですが、どうしても正しい結果が得られません。どなたか知恵を授けてやってください。よろしくお願いいたします。 ■問題 int型の数値(-32767から32767)を入力して、そのまま10進文字列(char型)として変換する。 ■私が書いたプログラム #include <stdio.h> int NUMtoCHAR(int c){ if(c >= 0 && c <= 9) return (c+'0'); else return c; } void main(void){ signed int i_value; int count, i; double f_value; char c[9]; printf("入力データ:");scanf("%d",&i_value); printf("\n"); for(i = 0; i < 9; i++) c[i] = ' '; if(i_value > 0){ c[0] = '+'; }else if(i_value < 0){ c[0] = '-'; } f_value = (double)i_value; count = 0; while(f_value >= 1){ f_value = f_value / 10.0; count++; } if(count == 0){ c[2] = '0'; }else{ for(i = 2; count > 0 && i < 9; count--, i++){ f_value = f_value * 10.0; i_value = f_value; c[i] = NUMtoCHAR(i_value); f_value = f_value - i_value; } } printf("10進文字 = "); for(i = 0; i < 9; i++) printf("%c", c[i]); printf("\n"); } 上記プログラムを実行して、入力データとして[32767]を入力すると、結果が[32766]となってしまいます。同じように[34]を入力すると[33]という結果になります。 elseの中に入れ子になっているfor文が怪しいということまでは判るのですが、どのように修正してよいか判りません。 大変長い質問で恐縮ですが、よろしくお願いいたします。 ■環境 OS:WindowsXP Compiler:Borland C++ 5.5.1 fowWin32
- ベストアンサー
- C・C++・C#
- 数値を2進数文字列に変換するものなんですが・・・
数値を2進数の文字列に変換するプログラムを関数として作成しているんですが、わからないことがあるのでお願いします。 char *itob(int value, int size, char binary[]) { int count = 0; /* binaryの添え字 */ int bit = size * 8; /* ビットになおす */ int mask = 1 << bit - 1; /* 先頭ビットに1を立てる */ /* 数値を2進数の文字列に変換する処理 */ do { if(value & mask) { /* valueとmaskのAND(論理積) */ binary[count] = '1';/* '1'を代入 */ }else { binary[count] = '0';/* '0'を代入 */ } value <<= 1; /* valueを左へ1ビットシフト */ count++; /* countを1たす */ }while(count < bit); /* 繰り返しを行う条件 */ binary[count] = '\0'; /* 最後に'\0'を入れる */ return binary; /* 変換した値を戻り値として返す */ } この前にもプログラムがありますが、コンパイルして実行する際に 10001 1110 と入力したら、 11111 という答えを出したいのですが、 これを実行すると、 00000000000000000000000000011111 となってしまいます。 これを11111とするためにはプログラムにどのような処理をすればよいのかわかりませんのでどなたかおわかりのかた解説をお願いします。
- ベストアンサー
- C・C++・C#
- 1から9までの数値をランダムに発生させたい
●質問の主旨 INT関数及びRND関数を使い、「0から9」までの 数値をランダムに発生させるのではなく、「1から9」 までの数値をランダムに発生させるには、下記のコードを どのように書き換えれば良いでしょうか? ●質問の補足 下記コード及び画像のように九九の計算問題を 作成したいと思っています。今のコードでは 「0から9」までの数値が発生するのは、分かっていたので If ThenステートメントやSelect Caseステートメントを 使って、0の数値が発生するときは「1」とみなすというような 記述もしてみましたが、上手くいきませんでした。 ご存知のかたよろしくお願いします。 なお使用機種はWindowsVista、Excel2007を使用しています。 私はVBAをはじめて3カ月程度です。 ●コード Option Explicit Const ORG_RW As Integer = 4 '問題の開始行 Const DST_RW As Integer = 8 '問題の終了行 Const NUM1_CLM As Integer = 1 '問題の数値1の列 Const NUM2_CLM As Integer = 3 '問題の数値2の列 Const ANSW_CLM As Integer = 5 '問題の解答の列 Private Sub CommandButton1_Click() 'Checkボタン Dim i As Integer 'カウンタ変数 For i = ORG_RW To DST_RW'問題の開始行から問題の終了行まで If Cells(i, NUM1_CLM).Value * Cells(i, NUM2_CLM).Value = Cells(i, ANSW_CLM).Value Then Cells(i, ANSW_CLM).Font.Color = vbBlue '問題が正解のときは文字が青色 Else Cells(i, ANSW_CLM).Font.Color = vbRed '問題が正解のときは文字が赤色 End If Next i End Sub Private Sub CommandButton2_Click() 'Resetボタン Dim i As Integer 'カウンタ変数 For i = ORG_RW To DST_RW Cells(i, ANSW_CLM).ClearContents '解答が消去される Cells(i, ANSW_CLM).Font.Color = vbBlack '解答が消去されたときは文字が黒色 ' 解答が消去されたときは0~9までのランダムな数値が発生 Cells(i, NUM1_CLM).Value = Int(Rnd * 10) '解答が消去されたときは0~9までのランダムな数値が発生 Cells(i, NUM2_CLM).Value = Int(Rnd * 10) Next i End Sub
- ベストアンサー
- Visual Basic
- 文字列から数値への変換
セルの書式設定(表示形式タブ)で文字列を数値に変えるのと、 VALUE関数で文字列を数値に変えるのとでは何か違いがありますか? (excel2000です。)
- ベストアンサー
- オフィス系ソフト
- 文字変換マクロについて
数値を文字列に変換するマクロで、行数や列数が増えても対応できるようにしたいです。 (並びは…数値 スペース 文字列)どなたか教えてください。 よろしくお願いします。 Sub 文字() Dim i As Long For i = 1 To Range("A1").End(xlDown).Row Cells(i, "C") = Cells(i, "A") With Cells(i, "C") .NumberFormatLocal = "@" .Value = StrConv(Cells(i, "C").Value, vbNarrow) .Value = Format(Cells(i, "C").Value, "'00") End With Next i End Sub
- ベストアンサー
- Excel(エクセル)
- 数値の算出について。
文字列の数値の合計を算出したいのですが マイナスの値があると、算出出来ません。 例 0000001 0000002 -001 とこういった3つの文字列があった場合 各値をint型に戻して総和を算出しようとしたいの ですが、マイナスの値があると エラーが発生します。 どなたかアドバイスお願いします。
- ベストアンサー
- Java
お礼
下記のようなソースで 文字列を添え字で分割して ウエイトをかける方式に 切り替えて何とか出来ました。 アドバイスどうもありがとうございました。 public static String Weight1(String isbn) { Integer[] Weight1 = new Integer[15]; Weight1[0] = Integer.valueOf(isbn.substring(0, 1)); Weight1[1] = Integer.valueOf(isbn.substring(1, 2)); Weight1[2] = Integer.valueOf(isbn.substring(2, 3)); Weight1[3] = Integer.valueOf(isbn.substring(3, 4)); Weight1[4] = Integer.valueOf(isbn.substring(4, 5)); Weight1[5] = Integer.valueOf(isbn.substring(5, 6)); Weight1[6] = Integer.valueOf(isbn.substring(6, 7)); Weight1[7] = Integer.valueOf(isbn.substring(7, 8)); Weight1[8] = Integer.valueOf(isbn.substring(8, 9)); Weight1[9] = Integer.valueOf(isbn.substring(9, 10)); Weight1[10] = Integer.valueOf(isbn.substring(10, 11)); Weight1[11] = Integer.valueOf(isbn.substring(11, 12)); Weight1[12] = Integer.valueOf(isbn.substring(12, 13)); Weight1[13] = Integer.valueOf(isbn.substring(13, 14)); Weight1[14] = Integer.valueOf(isbn.substring(14, 15)); //Weight(1) = //234512345123451 Integer total =( Weight1[0] * 2*2 %11) +(Weight1[1] * 3*2 %11) +(Weight1[2] * 4*2 %11 )+(Weight1[3] * 5*2 %11) +(Weight1[4] * 1*2 %11) +(Weight1[5] * 2*2 %11) +(Weight1[6] * 3*2 %11) +(Weight1[7] * 4*2 %11 )+(Weight1[8] * 5*2 %11) +(Weight1[9] * 1*2 %11) +(Weight1[10] * 2*2 %11) +(Weight1[11] * 3*2 %11) +(Weight1[12] * 4*2 %11) +(Weight1[13] * 5*2 %11 )+(Weight1[14] * 1*2 %11); total = (total % 11); /* 下1桁を11で引く */ String totals = String.valueOf(total); Integer digit = 11 - Integer.valueOf(totals.substring( totals.length() - 1, totals.length())); if (digit == 10) { return "0"; } else if ( digit == 11) { return "0"; } else if ( digit == 1) { return "0"; } else if ( digit == 0) { return "-"; } else { } return String.valueOf(digit); }
補足
アドバイスどうもありがとうございます。 やりたいことは以下のようになります。 Weight 234512345123451に対して long division = 0; division = Long.parseLong(value.substring(i, i+1)); 配列の添え字によって divisions[0]は×2 divisions[1]は×3 divisions[2]は×4 Weightをかけていきたいので divisions[i] = division * (i ); で計算できないのかと思ったのですが・・・