ウォーターサーバーとコーヒーマシンが一体化した画期的マシン >>

Java(android)にて電卓を作っております。
Double型の計算結果をString型に変換して表示させましたが、小さな数字は全て指数表示になります。2.5E-4 の表示を 0.00025 のString型に変換する方法は無いでしょうか?
Javaの仕様なので仕方がないのですが、方法を知っておられる方、教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

http://developer.android.com/reference/java/lang …

String型を使うとわかっているなら、String型のメンバくらいは一通りマニュアルを読んでおいた方がいいと思いますよ。
    • good
    • 0
この回答へのお礼

返答ありがとうございます。さっそくStringを調べてみました。
String.format("%f", atai);  でよろしいでしょうか?
まちがっていたら、すいません。ただ、Double型なのに出力は小数点6ケタまでとなりました。
例)1/3 → 0.333333   本当は 0.333333333333333 が欲しい。

で、いろいろ調べるうちに、java.text.DecimalFormat なるものを見つけました。
DecimalFormat df2 = new DecimalFormat("0.###################");
anser=df2.format(atai);

これなら、Double型を変換で困っていた 1.0 は 1 へ。
java仕様の小数点の最後の丸め誤差も一度に解決出来ました。
教えてもらったStringは使いませんでしたが、調べるヒントをもらいました。ありがとうございました。
 

お礼日時:2011/03/19 09:27

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q自然対数の底Eを含むStringの数字をDoubleにしたい

修士論文でJavaを使ったアプリケーションを開発しています。そこで、質問なのですが、
例えば1.19E-07という文字列をDoubleにしたいのですが、良い方法が見つかりませんでした。
Double.parsedouble()を使ってみたのですが、実行エラーが出てしまいます。
知っている方がおられましたらよろしくお願いいたします。

Aベストアンサー

まず、"1.19E-07"という文字列の"E"は、通常は自然対数の底ではありません。
指数であることを示しているだけで、この文字列は1.19×10の-7乗を意味します。
そうではなく、あくまでも自然対数の底だという場合は、この回答は無視して下さい。
Double.parseDouble()はdoubleを返します。これはプリミティブ型と言い、
参照型であるDoubleとは異なります。下のどちらが必要なのか、考えてみて下さい。

double f = Double.parseDouble("1.19E-07");
Double f = new Double("1.19E-07");

Qエクセルで計算すると2.43E-19などと表示される。Eとは何ですか?

よろしくお願いします。
エクセルの回帰分析をすると有意水準で2.43E-19などと表示されますが
Eとは何でしょうか?

また、回帰分析の数字の意味が良く分からないのですが、
皆さんは独学されましたか?それとも講座などをうけたのでしょうか?

回帰分析でR2(決定係数)しかみていないのですが
どうすれば回帰分析が分かるようになるのでしょうか?
本を読んだのですがいまいち難しくて分かりません。
教えてください。
よろしくお願いします。

Aベストアンサー

★回答
・最初に『回帰分析』をここで説明するのは少し大変なので『E』のみ説明します。
・回答者 No.1 ~ No.3 さんと同じく『指数表記』の『Exponent』ですよ。
・『指数』って分かりますか?
・10→1.0E+1(1.0×10の1乗)→×10倍
・100→1.0E+2(1.0×10の2乗)→×100倍
・1000→1.0E+3(1.0×10の3乗)→×1000倍
・0.1→1.0E-1(1.0×1/10の1乗)→×1/10倍→÷10
・0.01→1.0E-2(1.0×1/10の2乗)→×1/100倍→÷100
・0.001→1.0E-3(1.0×1/10の3乗)→×1/1000倍→÷1000
・になります。ようするに 10 を n 乗すると元の数字になるための指数表記のことですよ。
・よって、『2.43E-19』とは?
 2.43×1/(10の19乗)で、
 2.43×1/10000000000000000000となり、
 2.43×0.0000000000000000001だから、
 0.000000000000000000243という数値を意味します。

補足:
・E+数値は 10、100、1000 という大きい数を表します。
・E-数値は 0.1、0.01、0.001 という小さい数を表します。
・数学では『2.43×10』の次に、小さい数字で上に『19』と表示します。→http://ja.wikipedia.org/wiki/%E6%8C%87%E6%95%B0%E8%A1%A8%E8%A8%98
・最後に『回帰分析』とは何?下の『参考URL』をどうぞ。→『数学』カテゴリで質問してみては?

参考URL:http://ja.wikipedia.org/wiki/%E5%9B%9E%E5%B8%B0%E5%88%86%E6%9E%90

★回答
・最初に『回帰分析』をここで説明するのは少し大変なので『E』のみ説明します。
・回答者 No.1 ~ No.3 さんと同じく『指数表記』の『Exponent』ですよ。
・『指数』って分かりますか?
・10→1.0E+1(1.0×10の1乗)→×10倍
・100→1.0E+2(1.0×10の2乗)→×100倍
・1000→1.0E+3(1.0×10の3乗)→×1000倍
・0.1→1.0E-1(1.0×1/10の1乗)→×1/10倍→÷10
・0.01→1.0E-2(1.0×1/10の2乗)→×1/100倍→÷100
・0.001→1.0E-3(1.0×1/10の3乗)→×1/1000倍→÷1000
・になります。ようするに 10 を n 乗すると元の数字になるた...続きを読む

QJAVAのDouble型の小数点以下の値の取扱について

JAVAのDouble型の小数点以下の値の取扱について

JAVA勉強中の超初心者です。
Double aaa = 1.0;
Double bbb = 1.1;

という値があり、これを最終的にstring型に変換してテキストとして表示しています。
当たり前ですが、aaaなら1.0、bbbなら1.1と表示されます。
でもできれば
aaa→1
bbb→1.1
という風に小数点以下が0の場合は表示しないようにしたいのですがどのようにしたらよいか悩んでおります。
単純なことかもしれませんが宜しくお願いします。

Aベストアンサー

これではだめですか?

Double aaa = 1.0;
Double bbb = 1.1;

DecimalFormat format = new DecimalFormat("0.#");
System.out.println(format.format(aaa)); //1
System.out.println(format.format(bbb)); //1.1

http://java.sun.com/javase/ja/6/docs/ja/api/java/text/DecimalFormat.html

Qinterface,extend,implementのちがい

お世話になります、

Javaを勉強しているのですが、
interface,extend,implementの使い分けがわかりません。

私の解釈としては、
(1)interfaceは、グローバル変数の定義、グローバルメソッドの定義(実装はしない)。

(2)extendは、extendクラスを親クラスとして親クラスの機能を使用できる。

(3)implementは…,implementもextendと同じような意味だと解釈しているんですが、違う点は、implementで定義してあるメソッドは、使用しなくても、実装しなければならないという点でしょうか?

とにかくこの3つのを使い分けるコツとかあれば教えてください。
よろしくお願いします。

Aベストアンサー

バラバラに理解してもしょうがないッス。

まず、
(1)interface と implements
(2)class と extends

が対応しているわけっす。

JavaはC++と違って、比較的言語仕様を「簡単」にしたので「多重継承」という
概念がないです。
多重継承っていうのは、複数のクラスを親クラスにして継承するってことですね。

たとえば、 「TextFieldクラス」と「Japaneseクラス」を多重継承すると、
「JTextFieldクラス」ができるっていうのが自然な考え方でしょう?

まぁ、例えば、日本語クラスであれば、getStringLength()メソッドなどが
あったほうが良いでしょうか。
このgetStringLength()メソッドは、2バイト文字も1バイト文字も「1文字」
と数えてくれると言う点で、まさに、日本語クラス用のメソッドだと言えるでしょう。

例えば、Java的に記述すると、、、
class Japanese {
public int getStringLength() {
  ・・・
return strlength;
 }
 ・・・
}

class TextField {
・・・
}

class JTextField extends TextField, extends Japanese {
・・・・
}

C++ではそのように実装するでしょう。
しかし、Javaにはこのような高度な機能はありません。

そこで、生まれた苦肉の策が、「interfaceとimplements」です。

interface Japanese {
public int getStringLength(); // interfaceは実装を含まない!
                 // すなわち「実装の継承」ができるわけではない。
}

class TextField {
・・・
}

class JTextField extends TextField implements Japanese {
・・・・
public int getStringLength() {
  ・・・
return strlength; //implementsの実装を「各クラスで」実装してやる必要がある。
 }
}


結局のところ、Javaでは、複数のクラスを親クラスには持ち得ないため、継承できなかったクラスは「各クラスで実装してやる必要性」があるのです。


ではどのように使うのが効果的か?

なまえのままです。「代表的なインターフェイス」にたいしてinterfaceを使うのが良いと思います。

例えば、プレイヤー系であれば、ビデオ・コンポ・ウォークマン・などにかかわらず、
interface controlpanel {
public play();
public stop();
public next();
public back();
}
というような基本的インターフェイスを「持っているべき」です。

こうすることで、それぞれのクラス宣言の際に、これらの「インターフェイスを持っているべきであり、実装されるべきである」ということを「強く暗示」することができます。
class videoplayer extends player implements controlpanel {
public play() {・・・}
public stop() {・・・}
public next() {・・・}
public back() {・・・}
}

こうすることで、同様のクラスを作成するユーザーは、
「プレイヤー系は、4つ操作が出来るコントロールパネルをインターフェイスとして持つべきなのだな!?」という暗示を受け取り、自分のクラスでもそれを模倣するでしょう。

class mp3player extends player implements controlpanel {
public play() {・・・}
public stop() {・・・}
public next() {・・・}
public back() {・・・}
}

また、これらのクラスを使用するユーザーも、「implements controlpanel」という
表記を見て、「4つの基本操作は押さえられているのだな!」という基本中の基本動作を抑えることが出来ます。

まとめると、クラスに「こういう特徴もたしてください!」「こういう特徴持ってますよ!」という一種の暗示的警告や方向性を与えることができるわけですね。

バラバラに理解してもしょうがないッス。

まず、
(1)interface と implements
(2)class と extends

が対応しているわけっす。

JavaはC++と違って、比較的言語仕様を「簡単」にしたので「多重継承」という
概念がないです。
多重継承っていうのは、複数のクラスを親クラスにして継承するってことですね。

たとえば、 「TextFieldクラス」と「Japaneseクラス」を多重継承すると、
「JTextFieldクラス」ができるっていうのが自然な考え方でしょう?

まぁ、例えば、日本語クラスであれば...続きを読む

QIOException ってどういうときに起こるのでしょうか?

IOException ってどういうときに起こるのでしょうか?

http://www.atmarkit.co.jp/fjava/rensai2/javaent12/javaent12.html
を見て勉強しています。

  catch ( IOException e) {
    System.out.println( "キーボードが故障しているのかもしれません" );
  }

と書いてあります。
ハード(キーボード)が故障しているのを Java のプログラムのレベル(ソフトウェア)で感知できるというのがよくわかりません。「

NumberFormatException の方はわかるのですが・・・

Aベストアンサー

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接続だったりするわけですけど、
InputStreamは、その入力元の情報を持っていないので、
データを読み取る際は常に
IOExceptionをキャッチするコードを書かなくてはいけません。
たとえ、絶対にIOエラーが発生しないストリームだとしても。

さらに付け加えるなら、
そもそも「標準入力=キーボード」であるとは限りません。
(一般的にはキーボードであることが多いですが。)
Javaでは、
System.setIn(InputStream)
を呼び出して、標準入力を変えてしまうことができますし、
標準入力を指定してプログラムを実行することができるOSもあります。

追伸1:
例外をキャッチしたときは、
スタックトレースをプリントすることをおすすめします。
catch (IOException e) {
e.printStackTrace();
}

追伸2:
そのプログラムでIOExceptionを発生させる最も簡単な方法は、
readLine()を呼び出す前に
標準入力(System.in)を閉じてしまうことです。
System.in.close();

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接...続きを読む

Qjavaでunsignedは使えないのですか?

Eclipseを使い始めた初心者です。
short型変数を符号無しで宣言しようと思ったのですが、
赤の下線が出てしまってエラーの扱いになってしまっています。

javaではunsignedは使えないのでしょうか?
使えないのであれば、その理由と対処策を教えていただけましたら嬉しいです。
宜しくお願い致します。

Aベストアンサー

unsigned short などのような構文はありませんが、とりあえず負の値を使いたくないのなら char型を数値のように使えばよろしいかと思います。
char型のとりうる範囲は0~65535で、範囲外の数値はint型とみなされます(数値を直接代入する場合のみ)。
ただし負のintをcharにキャストすると上位ビットが欠落します。

char c;
c = 0;
c = 65535;
c = 65536; ←コンパイルエラー
c = -1; ←コンパイルエラー
c = (char)-1; ←コンパイルエラーにはならないが65535になる

Qequalsの逆

javaで、文字列の場合は比較演算子の「==」は用いずに

if ((str1.getText()).equals(str2)){
(※…str1,2は文字列)

と書きますよね?
この逆で、文字列str1とstr2は等しくないとき、にはif以下の条件文をどのように書けばよいでしょうか?

Aベストアンサー

>if !((str1.getText()).equals(str2)){

あくまで
if(){
}


!(str1.getText()).equals(str2)
が入っているので
if !((str1.getText()).equals(str2)){
じゃなくて
if (!(str1.getText()).equals(str2)){
こう。

Q英語で「個数」「件数」は?

質問は単純です。
英語で「個数」や「件数」をなんというか、です。

とりあえず、思いついたのは、numberでした。
たとえば、「りんごの個数」は"a number of apples"ですか?
でも、"a number of"は「いくつかの」という意味ですよね。

「データの件数」は"a number of data"でしょうか?

私は英語はほとんど出来ませんが、numberは「個数」というよりも「番号」という意味であるような気がしてなりません。

Aベストアンサー

>「個数」や「件数」をなんというか、です。
>とりあえず、思いついたのは、numberでした。
意外に思われるかもしれまんせんが、語の選択はnumberであっています、と思います。

>「りんごの個数」
the number of (the) apples

>「データの件数」
the number of (the) data

>numberは「個数」というよりも「番号」という意味であるような気がしてなりません。
実は、昔、私も、「個数や件数はなんていうのかな、え、number? え、本当?」と、奇異に感じたことを、思い出しました。

Q浮動小数点数について

参考書に「3.14」のような小数点表現に、e(またはE)を使う。
たとえば、「1e2」、「1e+2」は「100」、
「1e-2」は「0.01」を表す。
と書いてあったのですが、
「e」はどういう意味で、どうして例題のような答えに
なるのですか?

Aベストアンサー

eは指数部(exponential part)、冪乗(exponential)の意味です。
e(E)は単精度指数型表現の実数定数の指数部の前に置かれ、d(D)は倍精度(double precision)指数型表現の実数定数の指数部の前に置かれます。
e(E)やd(D)が実数の定数データの中で使われるとき、
基数が10であること、それらの前が仮数部、それらの後が指数部というプログラム言語の約束事(文法)ですね。aeb(aEb, aE+b),adb(aDb,aD+b)などの実数定数があったら、 ax10^b と置き換えて考えてください。

ちなみに、1.0e+2=1.0x10^(+2)=100.0で
1.0は仮数部,10は基数,+2は指数部と言っています。
同様に、0.5e-2=0.5x10^(-2)=0.005
ですね。

これはプログラム文法の約束ごとであって、どうしてそうなるかではなく、そう決められているのです。
歴史的には、科学技術用の汎用大型計算機を開発し世界中に広めた米国IBM社がFortranというプログラム言語の文法仕様の中で指数部を持つ実数型データの表現法として採用したものが、現在広く使われているということです。

eは指数部(exponential part)、冪乗(exponential)の意味です。
e(E)は単精度指数型表現の実数定数の指数部の前に置かれ、d(D)は倍精度(double precision)指数型表現の実数定数の指数部の前に置かれます。
e(E)やd(D)が実数の定数データの中で使われるとき、
基数が10であること、それらの前が仮数部、それらの後が指数部というプログラム言語の約束事(文法)ですね。aeb(aEb, aE+b),adb(aDb,aD+b)などの実数定数があったら、 ax10^b と置き換えて考えてください。

ちなみに、1.0e+2=1.0x10^(+2)=100....続きを読む

QExcelで指数表現しないようにする方法

こんにちは。
csvファイルに 10E098 という文字列がある場合、
このファイルをダブルクリックしてExcelで表示すると
1.00E+99 のように指数形式で表示されてしまいます。
(セルのプロパティも「指数」になっています)
そのまま 10E098 という文字列で表示するようにしたいのですが
どのようにすればよいのでしょうか?
ちなみに、該当のセルの表示形式を「標準」にしても「文字列」に
しても 1E+99 と表示されてしまって出来ませんでした。
よろしくお願いいたします。

Aベストアンサー

CSVファイルを読み込むときに普通に読み込むと数値を見なして1E+99になりますので、文字列として読み込んだらいかがですか

「データ」→「区切り位置」を選択し「カンマやタブなどの…」を選択する。ウィザード2/3画面で区切り文字「カンマ」にチェックを入れ、3/3画面でその数値のある列を「文字列」にします

この文字列を数値にするなら以下のような式で可能です
=VALUE(LEFT(A1,FIND("E",A1)-1))*10^VALUE(RIGHT(A1,LEN(A1)-FIND("E",A1)))


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング