• ベストアンサー

実数からの小数部の取得

いつも参考にさせて頂いております。 実数から小数部分のみを取り出す良い方法はないでしょうか? 1.25→0.25(もしくは25)となるような。 よろしくお願いします。

  • Java
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

 まず、DoubleクラスのintValue()メソッドを使えば、整数部がはじける。  IntegerクラスのdoubleValue()メソッドを使えば、そのint値をdouble値に変換できるので、元のdouble値と演算できるね。具体的なサンプルを用意したので参考にして欲しい。 public class A { public static void main(String[] args) { Double d = new Double(1.25); Integer i = new Integer(d.intValue()); Double d2 = new Double(i.doubleValue()); System.out.println(d.doubleValue()); System.out.println(d2.doubleValue()); System.out.println(d.doubleValue() - d2.doubleValue()); } }

b-u-z-z
質問者

補足

anmochiさん、サンプルありがとうございます。 小数部を取得することが出来ました! 余談になってしまうんですが、 int i = new Integer(d.intValue());や double d2 = new Double(i.doubleValue());は、 int i = (int) d;や double d2 = (double) i;などでは まずいんでしょうか? Java(オブジェクト指向)をまだ理解していないもので、いまいちnewとかの使いどころが 曖昧で、サンプルのようなコードイメージがパッと浮かばないんです・・・

その他の回答 (1)

  • UKY
  • ベストアンサー率50% (604/1207)
回答No.2

値を1で割った余りを求めるのが簡単。 例えば System.out.println(123.75 % 1.0); で「0.75」と出力される。 で、補足に関してですが、 > int i = new Integer(d.intValue()); > double d2 = new Double(i.doubleValue()); ↑これはまずい。(new 演算子によって作られた)IntegerやDoubleのオブジェクトをintやdouble型の変数に入れることはできないのです。 anmochi氏の回答をよく見てみてください。int/double型ではなくInteger/Doubleが他の変数に代入していますよね。 > int i = (int) d; > double d2 = (double) i; ↑こちらはOK。 Integer/Double のオブジェクトを使っても、int/double の値で直接計算しても実質的な処理内容は同じです。 ただ、doubleよりintのほうが表せる値の範囲が小さいので元の実数値が大きいと正しく小数部分のみ取り出すことができない可能性があります。 1で割った余りを取る方法ではこういう心配はありません。

b-u-z-z
質問者

お礼

UKYさん、ありがとうございます。 なかなか奥が深いですね。 これからも頑張ります。

関連するQ&A

  • 実数の整数部,小数部の取得

    OS:windows2000pro VB:VB6.0sp5 実数 num(変数) [as currency]  (但し 小数点以下2位まで)の値の 1.整数部 num_int(変数) [as long] 2.小数部 num_dec(変数) [as long] を上記変数に格納するのは、どのようにすればいいのでしょうか? (例1)num = 123.02 の場合、num_int=123, num_dec=2 (例2)num = 4.20 の場合、num_int= 4, num_dec=20 (例3)num = 0.23 の場合、num_int= 0, num_dec=23  よろしくお願いいたします

  • 任意の実数は必ず小数展開出来ることはどうすれば示せ

    任意の実数は必ず小数展開出来ることはどうすれば示せるのでしょうか? どうかわかりやすくご教示ください。

  • 実数について

    (1)任意の実数αは有限または無限小数で表せることを証明せよ。 (2)任意の実数αはある単調増加な有利数列の極限となることを示せ。 という問題なんですがまったくどうやって手をつけていいのかがわかりません。わかる方おしえてください。

  • 整数部分と小数部分

    夏休みの宿題で困っています。実数の小数部分と整数部分の求め方がよく分かりません。 例題などをだしていただければ助かります。お願いします。

  • バイナリファイルの読込み(小数の扱いについて)

    お世話になっています。 今、バイナリファイル(BSQフォーマット)を読み込むプログラムをC言語で書こうとしています。バイナリファイルの内容は数字(実数)の配列です。 そのバイナリファイルは、1数字につき2バイトしかなく、浮動小数点(float4バイトとdouble8バイト)などが使えませんでした。 なので、固定小数点なのかと思い、1バイトずつcharで読み込んだところ整数部分だけうまく読み込めました。しかし小数部分がうまくいきませんでした。 バイナリエディタで見たところ以下のようになっていました。 例:C2 FF(or 00) (この値が-62になることは分かっています。) しかし、上記の方法で読み込んだ結果は-62 -1でした。 そこで質問なのですが、 (1)2バイトの実数を1バイトで区切って整数と小数に分けて行うことなどあるのでしょうか? (2)上記の方法で行った場合、FFが-1になり、00も-1になってしまいます。本来なら小数部分のFFも00も値は0にならなければいけないのですが・・・。これは、どのように解決すればいいのでしょうか? 部分的に間違っている。根本的に間違っている。などなど アドバイスよろしくお願いします。

  • 新しい実数の構成:自然数→正の実数→実数

    次のような実数の構成はあるのでしょうか? まず、10進法の表記により自然数を構成します。 0を含めます。 0,1,2,3,4,5,6,7,8,9,10, 11、12、・・・ といった数を考えます。 ケタ数は有限です。 順序関係は、まず、ケタの大小を比べ、ケタが同じであれば、最大ケタの数字を比べます。 0~9までの加法と乗法を九九として決め、一般の自然数の加法と乗法は筆算により定めます。 つぎに、小数点以下を考えます。 まず、小数点以下のケタ数が有限なる数を考えても、順序関係と加法・乗法はいままでと同様です。 そして、小数点以下のケタ数が無限なる数を考えます。 順序関係はいままでに追加して、 1=1.000・・・=0.999・・・ といったことなどを考えます。 加法と乗法の筆算も、「左から計算」していけばいいと思います。 このとき、新しく除法も考えられます。 これで、正の実数が構成できたと思いますが、 最後に、小数点以上のケタ数が無限なる数を考えます。 たとえば、 ・・・1212.12  とか ・・・333.333・・・ 順序関係はうまくいきませんが、 ・・・999+1=・・・000=0 と考えると、 ・・・999=-1 といった意味になり、 3をかけることで、 ・・・997=-3 といった意味になったり、 3でわることで、 ・・・333=-1/3 といった意味になったりします。 また、加法と乗法の筆算は、「小数点を中心に左右へ計算」していけば整合性が得られると思われます。 そして、減法・除法も考えられると思います。 つまり、負の実数が構成されたと思います。 結局、左右に無限に続く10進法表記で、実数とその加減乗除が構成されたと思います。 このような、実数の構成はあるのでしょうか? また、不備がありましたら指摘ください。

  • 入力値が小数なら、整数部・小数部の桁チェックをしたい。

    VB2005環境です。 テキストボックスに数値が入力された時、整数部分が4桁以上か、 小数部分が2桁以上になっている場合、警告メッセージを出したいと 考えています。 具体的には、 0.1→OK 99.9→OK 100.1→OK 0.01→NG 1001.9→NG 0.99→NG 1111→NG テキストボックスは数字以外の入力も許可しており、数字を 入力した場合だけのチェックです。 まずIsNumericで数値判定を行っているのですが、その後、上述の 小数桁チェックをどうしたら良いか悩んでいます。 また、99を入力した場合は99.0、09.1と入力した場合には9.1と、 整数部は一番左側に0があれば消し、小数部は未入力ならば".0"を 追加できたらと思っているのですが、うまくいきません。 実現するために必要な処理は、 ・入力値が数値か ・数値であれば、整数か、小数か ・整数部の桁チェック ・小数部の桁チェック(小数時) ・整数であれば、999.9の形になるよう変換 といったところかなと思うんですが、まず小数チェックで 躓いています。 参考にロジックを交えて教えていただけないでしょうか。 宜しくお願いします。

  • 実数をIEEE規格に基づく浮動小数点の表現法

    実数をIEEE規格に基づく浮動小数点の表現法で プログラミング表現したいのですがわけがわかりません。 単精度32bitで表現します。 助けてください。お願いします。 (例:実数0.5、IEEE:00111111100000000000000000000) のような形になるようです。

  • 浮動小数点:エクセス64について

    浮動小数点を表現するエクセス64で表現されている8バイトの実数である以下の2つがあるのですが、 40 19 99 99 99 99 99 9a (16進) 41 18 00 00 00 00 00 00 (16進) それぞれ0.1と1.5らしいのですが小数点以下の部分のエクセス64での表現がよくわかりません。 どなたか解説をしていただける方はいらっしゃいますでしょうか。 よろしくお願いいたします。

  • 小数点の読み方

    いつもお世話になります。 英語で音読の練習をしていますが、例えば、 ¥12.7 2.77% 0.565 など、ピリオドの部分はなんと発音すればよいのでしょう? それと、小数点以下の部分、小数点第2位以降はなんと発音すればよいのでしょう? よろしくお願いします。