
佐藤と申します。
いつも拝見させて頂き、参考にさせて頂いております。
小数点について質問させて頂きます。
単価と数量、割引率を入力とし、収益率と合計金額を算出しようと思っております。
合計金額はごく普通の計算式で問題ありませんでしたが、収益率を小数点第2位(以降切捨て)で算出出来ておりません。
自分なりに色々と調べ、BigDecimalを使えば小数点を表示する事が出来るとの事ですが、計算式では使用することが出来ませんでした。
計算結果を小数点以下で表示することは可能でしょうか?
分かる方がいらっしゃれば、是非ご教授下さい。
宜しくお願い致します。
import java.io.*; //入力ストリームクラスのインポート定義
import java.math.BigDecimal;
public class kadai12{
public static void main(String args[]) throws IOException{
//キーボードからの入力等
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
//入力データバッファの定義&代入
String check;
char w0;
int w1=0;
int w2=0;
int w3=0;
int num;
//System.out.print("1");
//読込チェック=NULLならば処理を終了させる
while(((check = buf.readLine())!=null)){
char[] src = check.toCharArray();
String[] work = check.split(",");
int a=0;
//入力ファイルチェック1
try{
num=Integer.parseInt(work[1]);
}catch(Exception e){
System.out.print("2桁目が数値ではありません");
return;
}
//入力ファイルチェック2
try{
num=Integer.parseInt(work[2]);
}catch(Exception e){
System.out.print("3桁目が数値ではありません");
return;
}
//入力ファイルチェック3
try{
num=Integer.parseInt(work[3]);
}catch(Exception e){
System.out.print("4桁目が数値ではありません");
return;
}
//w0=名称 w1=単価 w2=数量 w3=割引率
w0=src[0];
w1=Integer.parseInt(work[1]);
w2=Integer.parseInt(work[2]);
w3=Integer.parseInt(work[3]);
//合計金額算出
n=0;
n=w1*w2;
//収益率算出
BigDecimal n2=new BigDecimal("0.00");
n2=n*w3/n;
System.out.println(check);
System.out.println(n2 + "=" + n + "*" + w3 + "/" + n);
System.out.println(n + "=" + w1 + "*" + w2);
}
}
}
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
質問の意図と違うかもしれないですが、
2つの数値を割って小数第二位まで表示、それ以降を切り捨てする方法です。
ExcelやAccessなどでよく使われる考え方です。
double dividend = 9; //割られる数
double divisor = 7; //割る数
double d = dividend / divisor; // 9/7 = 1.2857…
double d2 = (d * 100); //1.2857…*100 = 128.57…
int i = (int)d2; // (int)128.57… → 128
double ans = i / 100.00; // 128 / 100.00 = 1.28
doubleをintにキャストすると、小数部分が切り捨てられます。
これを利用すれば、切捨ては簡単に可能です。
ただ、今回は小数第二位までは残さないといけないので、最初に100倍しておきます。
これにより、小数第二位までが整数に桁上げされます。
その後でintへキャストし、小数部分(元は小数第三位以下)を切り捨てます。
後は、100.00で割って桁上げを元に戻します。
計算部分をまとめると、
double dividend, divisor;
double ans = (int)(dividend / divisor * 100) / 100.00;
という風に書けます。
こんな感じです。
あまり細かい検証はしていないので、違ってたらすみません。
あと、このやり方は負の数が入ると厳密には正しくなくなります。
(もう一つ、二つくらい工夫が必要です)
金額計算ということで、正の数を限定したやり方です。
neko_nokoさん、ご回答をありがとうございます。
私の求めていた答えが正にそれです。
neko_nokoさんに記述して頂いた通りにPGMを作り変えたら上手く行きました。
丁寧なご回答、誠に感謝致します。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Javaによる利率計算の実装方法
-
戻り値?
-
javaのdoubleでの計算による誤差
-
doubleについて
-
double型の足し算について
-
0dの意味を教えてください
-
掛け算演算を使わない掛け算
-
Javaで何パーセント%かを表示...
-
JAVAのプログラムで、2乗計算...
-
JSPでHTMLの表示が優先されてし...
-
初心者です。教えてください!
-
オブジェクトのフィールドのコ...
-
参照・値渡しについて
-
continue文以外で・・・
-
日本語が文字コードによっては...
-
DOMでXMLからデータを抽出する...
-
【AWT】別ウィンドウのLabel設...
-
TABキーの検出
-
C言語で3次元配列の課題をして...
-
Swingなしで画像ファイルロード
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
0dの意味を教えてください
-
実数からの小数部の取得
-
べき乗
-
double型変数値の整数部分のみ...
-
Javaで何パーセント%かを表示...
-
Java math.powメソッド
-
javaで1.8x10の308乗÷...
-
掛け算演算を使わない掛け算
-
Java 7日後までの天気を予測する
-
小数点以下の切捨てにつきまして
-
浮動小数点とセットで使用され...
-
Java 出力 桁数調整
-
自然対数の底Eを含むStringの数...
-
乱数のdouble型について
-
最大値をもとめる
-
Javaによる利率計算の実装方法
-
最大値と最小値の求め方
-
数値からバイト配列への変換に...
-
モンテカルロ法を用いた球の体...
-
java のfor文について質問です。
おすすめ情報