• ベストアンサー

数値の算出について。

文字列の数値の合計を算出したいのですが マイナスの値があると、算出出来ません。 例 0000001 0000002 -001 とこういった3つの文字列があった場合 各値をint型に戻して総和を算出しようとしたいの ですが、マイナスの値があると エラーが発生します。 どなたかアドバイスお願いします。

  • Java
  • 回答数8
  • ありがとう数4

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

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.8

#3です。 補足してもらいながら申し訳無いですが、言っている事がよく分かりませんでした。#3のお礼欄は↓こういう事ですか? 1. #3のお礼欄に書いてあるコード中の「000002590」などの値が書いてある箇所は、実際のコードではString変数が書いてある。 2. そのコードは変数の値が「123456789」「000002590」「-2590」などの場合は正常に動作した。 3. 変数の値が「____-2590」の場合はエラーが発生した。 ('_'は半角スペースに読み替えて下さい) もしこの憶測が合っているとしたら、そのString変数のtrim()の戻り値を Integer.valueOf に渡してやれば良いだけです。 final String hoge = " -2590"; int lot3 = Integer.valueOf(hoge.trim()).intValue(); trim() は先頭と最後の空白を取り除いた文字列を返します。 http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#trim%28%29 空白が文字列の先頭でなく「-」と「2590」の間にあるなら、 replaceAll を使えばよいでしょう。 hoge.replaceAll(" ", "") http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#replaceAll%28java.lang.String,%20java.lang.String%29 これ以降、この憶測が合っていたという前提で書きます。 正直言って、この憶測をするのにもかなり時間が掛かりました。 実際のコードから変更したこともその場所もハッキリとは書いていないので、コンパイルエラーが発生するコードを提示されて「算出できます」と言われても訳が分かりません。 基本的に、ソースコードを提示する場合は、実際のものをそのまま書きましょう。そのまま載せる事が出来ない場合は、変更した箇所をコメントなどでハッキリと分かるようにしましょう。 そして、実行した際に↓の様な例外が発生していたはずです。 java.lang.NumberFormatException: For input string: " -2590" これが最初の質問文に書いてあれば、あっという間に解決したでしょう。 また、実際のソースコードをそのまま載せた上で、正常に動作する場合の変数の値とエラーになる場合の変数の値を提示していたら、かなり回答するのは容易だったと思われます。

ITJack
質問者

お礼

>そして、実行した際に↓の様な例外が発生していたはずです。 java.lang.NumberFormatException: For input string: " -2590"の エラーを記述すればよかったのですね。 「-」と「2590」の間にある空白でなくても 空白が文字列の先頭でも ご回答いただく前に replaceAllで解決しました。 どうもありがとうございました。

その他の回答 (7)

  • wormhole
  • ベストアンサー率28% (1622/5658)
回答No.7

>ちゃんと、ロングで対応して >9桁の文字列でも算出出来てます。 これもまったくの意味不明です。 「0000001」の事をもしかして「7桁のゼロパディングされた1」だと思ってますか?

noname#208507
noname#208507
回答No.6

横から失礼。 > >あなたが書いたコードなどが間違ってたら > > #1の補足に書かれていたコードの事です。 たぶん wormhole さんが言われているのはそういう事ではなく、質問の方法そのものだと思います。 #1の補足のコードは、質問者さんご自身が #2 で「書き間違えました」と補足されていますし、確かに変数名やparseInt()の引数が間違えているためコンパイルできません。 どんなアドバイスも、書き間違えたコードに基づいていては的外れになる可能性が高いでしょう。マイナスの値でエラーが起きたというコードを、もう一度きちんと提示されてはいかがですか。

ITJack
質問者

お礼

今後は、質問内容によりますが エラーがおこるソースを 記述してご相談致します。

  • wormhole
  • ベストアンサー率28% (1622/5658)
回答No.5

>あなたが書いたコードなどが間違ってたら #1の補足に書かれていたコードの事です。

  • wormhole
  • ベストアンサー率28% (1622/5658)
回答No.4

>その事で質問したのではなくて >マイナスの値について >ご相談させて頂きました。 あの・・・アドバイスするにしても、あなたが書いたコードなどが間違ってたら的確なアドバイスなどできるわけないじゃないですか。

ITJack
質問者

お礼

コード提示より マイナス数値の算出方法に 適したメソッドがあれば すぐ解決すると思って。 すいませんでした。

  • root139
  • ベストアンサー率60% (488/809)
回答No.3

アドバイスとしては、まず、 a. どの様なコードを実行して b. どの様な状態になったのか c. エラーが出たなら、どの様なエラーや例外だったのか、どの様なメッセージが出たのか を明確にする事でしょう、

ITJack
質問者

お礼

検証の結果とが分かりましたのでご報告させていただきます。 まず下記のようなソースを作成し マイナスの数値も加えると 値が370135800になり算出できます。 import java.text.DecimalFormat; import java.text.NumberFormat; public class 金額算出 { /** * @param args */ public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ int lot1 = Integer.valueOf(123456789).intValue(); int lot2 = Integer.valueOf(123456789).intValue(); int lot3 = Integer.valueOf(123456789).intValue(); int lot4 = Integer.valueOf(-234567).intValue(); int plus = lot1 + lot2 + lot3 + lot4; NumberFormat nf1plus = new DecimalFormat("#0"); String totalvalue = nf1plus.format(plus); System.out.println( totalvalue); } } 因みに System.out.println((Long.parseLong(123456789) + Long.parseLong( -234567)));な 感じでも算出可能でした。 今回の値はテキスト入出力の値になりますが テキストの中身が分かりやすいように カッコ内に数値を表示してますが 頭に0が付く9ケタの数値でも値が算出できます。 int lot1 = Integer.valueOf(000002590).intValue(); int lot2 = Integer.valueOf(000002590).intValue(); int lot3 = Integer.valueOf(000002590).intValue(); int plus = lot1 + lot2 + lot3 NumberFormat nf1plus = new DecimalFormat("#0"); String totalvalue = nf1plus.format(plus); System.out.println( totalvalue); } 因みに nt lot1 = Integer.valueOf(000002590).intValue(); int lot2 = Integer.valueOf(000002590).intValue(); int lot3 = Integer.valueOf(-2590).intValue(); int plus = lot1 + lot2 + lot3 NumberFormat nf1plus = new DecimalFormat("#0"); String totalvalue = nf1plus.format(plus); System.out.println( totalvalue); } このようなマイナス内を入れて検証しても問題ありませんでした。 ですが ほんとのマイナス数値は 数値の前にスペースがあるのです。 000002590 000002590 -2590(この場合-も含めて5桁ありますから数値の前にスペースが4桁あります)のような感じです。 スペースがなければ算出できるのですが 原因はテキストデータの中に含まれるマイナス数値の 前にあるスペースと思われます。 ここまでは分かりましたが、 この文字列で算出できればと思っております。

ITJack
質問者

補足

ありがとうございます。 自宅に戻ってから、検証して 改めてご報告させて頂きます。

  • wormhole
  • ベストアンサー率28% (1622/5658)
回答No.2

>int intValue1 = Integer.parseInt(0000001); >int intValue2 = Integer.parseInt(0000003); >int intValue3 = Integer.parseInt(-00001); 本当に上のように書かれているのでしたら Integer.parseIntの仕様を調べてください。 0000001,0000003,-00001 の型がなんなのか考えてください。

ITJack
質問者

補足

書き間違えました。 ちゃんと、ロングで対応して 9桁の文字列でも算出出来てます。 その事で質問したのではなくて マイナスの値について ご相談させて頂きました。

  • wormhole
  • ベストアンサー率28% (1622/5658)
回答No.1

どういうコードを書かれていて、どういうエラーが出ているのか、なぜ書かないのでしょうか? アドバイスといっても今の状態だと「あなたが書かれたコードがどこかおかしいから」くらいしかいえませんが。

ITJack
質問者

補足

単純に数値型に戻した値を、  int intValue1 = Integer.parseInt(0000001);  int intValue2 = Integer.parseInt(0000003);  int intValue3 = Integer.parseInt(-00001); Total = Value1 + Value2 + Value3 System.out.println(Total): とこんな感じです。 やり方が間違っている だけだと思いますが 何か便利なメソッドがあるか ご相談させて頂きました。

関連するQ&A

  • 数値の抽出方法がわからず困っています

    テキストデータの処理がうまくいかず困っています。 ----------------------------------------------- a:0.001 b:-11.111 c:50.5 d:-12.345 ----------------------------------------------- といった文字列から ----------------------------------------------- 0.001 -11.111 50.5 -12.345 ----------------------------------------------- といった形で符号や小数点を含めて抽出したいのですが どのようにするのが良いのでしょうか。 各値は、それぞれの値がスペースによって区切られています。 また、各値は数値の大きさがそれぞれ異なり桁数が一定ではありません。 split や substr を用いてやろうとしているのですが、 なかなか思ったとおりの形で出力できません…

  • TransferSpreadsheetでの数値丸め

    前回の質問と関連がありますのでご参考下さい TransferSpreadsheetでの指数表記 https://okwave.jp/qa/q10095442.html Access上のVBAにてTransferSpreadsheetを利用して Excelを読み込みテーブルに表示させているのですが、 以下書式条件だと何故か数値が丸められ正しくない値が読み込まれます。 例1 1行目(ヘッダ)文字列 2行目 数値(書式:数値) 3行目 数値(書式:文字列) 結果1 2行目の値が丸められてAccessのテーブルに取り込まれます。 例2 1行目(ヘッダ)文字列 2行目 数値(書式:数値) 3行目 数値(書式:数値) 結果2 この場合はどちらも丸められず、正しい数値が取り込まれます。 Excelの書式で文字列と数値が混在した時限定の挙動の様です。 取り込み元のExcelは編集不可になります。 数値を丸められず正しく読み込む方法はありますか?

  • [Excel]重複しない文字に対応する数値の合計を求めたい

    Excelの関数で困っています。 ---------------- | A | B | C | 1|記号|名前|値 | 2| + |aaa |50 | 3| + |bbb |20 | 4| - |aaa | | 5| + |ccc |90 | 6| + |ddd |40 | 7| - |ddd | | ---------------- | |合計|110| ---------------- 上のような表で(形式は変えられない) 重複を除いた"3C"と"5C"の[値]の合計値のみを算出したいです。 条件としては、 (1)[B]の重複するデータを見つける(2つのはず) (2)(1)の2つのうち、片方の[A]の"+"、もう片方の[A]は"-"であることを確認 (3)"2C"から"7C"の範囲で、(2)を確認した(1)を除いた合計値を算出する といった流れです。 どのような条件式を与えれば良いでしょうか? 調べてもなかなか同じような例がないし、理解が難しいです。 DSUMを使うのかとは思ってますが。 詳しい方がいらっしゃればご教授お願い致します。 ※"記号"・"名前"は文字列で"値"は数値です。 ※"記号"が"-"のものは"値"が空です。

  • EXCELの上位3個の数値の集計

    EXCELの集計方法につきまして、ご教授をお願い致します。 EXCELで複数の数値の中で、上位3個の数値の合計を算出する場合。 通常はA列~K列までに数値が入っている場合 =LARGE(A1:K1,1)+LARGE(A1:K1,2)+LARGE(A1:K1,3) のように算出するのが一般的ですが・・・。 B、D、F、H、J列を集計対象から除きたい場合は、どのようになりますでしょうか? すなわち A、C、E、G、I列のみの上位3個の数値合計を算出したいのです。 すみませんが、よろしくお願いいたします。

  • IF関数を算出した値を合計する

    こんにちは。 IF関数を使用した値を合計することができない為、お力を下さい。 IF関数で=IF(A1<B1,C,D)と組んだ式ででた値を合計したいのですが 上手くできません。 文字列かと思いセルの書式設定を数値にしたのですができませんでした。 エラーメッセージも出ないため、何が問題なのかがわかりません。 わかることがあれば教えてください。 宜しく御願い致します。

  • ある文字列から数値だけを取り出したいのですが

    EXCEL初心者です EXCEL2000で ある文字列から”-(マイナス)”記号以降の 数値だけを取り出したいのですが、よい方法がわかりません、 例) 12.8-20.0→20.0 13.5-15.3→15.3 1.5-5.6→5.6

  • ms access クエリの集計について

    こんにちは ms accessのクエリで、文字列として入力されている数字を数値扱いに直してその合計を出そうとしているのですが、特定の値を指定して合計を出そうとすると値がマイナスになってしまいます。 例 式1:sum(val(nz[フィールド名]))=1) フィールドに1とあるレコードを足して合計を出す場合です。値がマイナスになってしまいます。nzは別のクエリ使用時に空欄があるとまずいので入れてあります。 左隣で別のフィールドでグループ化し、ここでは演算を選択しています。

  • Excelでデータの各値とその個数を生成するには

    Excelでデータの各値とその個数を生成するような機能はないでしょうか? 例えば、Excelの A列に1,2,3,2,5,3,2という数値が入力されていた場合に、 B列に1,2,3,4,5という値と、 C列に各値の個数である1,3,2,0,1という値が 生成されるような機能はありますでしょうか。 できれば、A列のデータから、 添付図のグラフを生成させたいです。 なお、上記の例のA,B,C列は一例で、データの数も7個だけですが、 実際には、数百あり、桁数も1~4桁の値です。 よろしくお願いします。(Windows10,Excel2016)

  • エクセル VBA自動合計算出について

    エクセル VBAで悩んでいます。  内容としては、エクセルデータをアクセスに取り込みたいのですが、表の合計をSUMにて合計した値を取り込んだ場合、文字列になってしまいアクセスで数値の認識されません。よってエクセル VBAを使用し、自動計算させたいと考えています。 具体的にすると画像の赤部分の名称1から名称9までを指定し、縦の数値を合計し、その後 1列空白行を作り、名称10から名称16までを自動計算させるというプログラムにしたいのです。 上記のようなプログラム組めるでしょうか? アドバイスをいただけないでしょうか?

  • C#で数値を抽出したい

    0,2,3,3,5,6, という文字列があったとしまして、これを左の数値からint型配列にひとつひとつ格納したいのですが、どうやればいいかわかりません。 int[0]=0 int[1]=2 ... int[5]=6 どなたか教えてください!

専門家に質問してみよう