質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

4回答

6340閲覧

Javaで百の位や十の位で切り捨てる方法を教えてください。

shou_hitotose

総合スコア66

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

1グッド

0クリップ

投稿2018/10/11 04:39

コード ```### 前提・実現したいこと Java初心者です。基本的な質問ですみません。 ここに質問の内容を詳しく書いてください。Javaの計算結果で百の位や十の位で切り捨てる方法を教えてください。 (例)PHP(CakePHP)で●●なシステムを作っています。 ■■な機能を実装中に以下のエラーメッセージが発生しました。 ### 発生している問題・エラーメッセージ Javaの計算プログラムのうちの百の位で切り捨てる方法が分かりません。(例)15743.51328973などの計算結果があったとして15700と表示する。いまのままだと15743.8924151となったら15743.0とかとなります。まあroundを使っているので当たり前といえば当たり前なんですが・・・。そこでどなたか百の位で切り捨てる方法を教えてください。よろしくおねがいします」。 ma

エラーメッセージ

### 該当のソースコード   import java.io.*; public class FallInWind { public static void main(String args[]) { double x, y, x_speed, y_speed, x_initial_speed, x_wind_speed1; double r; double g; float z; g = -9.80665; try{ BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); buf=br.readLine(); x = 0; y = 100000; x_initial_speed = 800; x_wind_speed1 = Double.parseDouble(buf); x_speed = x_initial_speed; y_speed = 0; r = 100000; while( y >= 0 ) { y_speed += g/r; if( y > 8000 ) { x_speed = x_initial_speed + x_wind_speed1; } else { x_speed = x_initial_speed; } x += x_speed/r; y += y_speed/r; z=Math.round(x); } System.out.print("estimated distance = "+x+"\n"); System.out.print("estimated distance is approximately"+z+"\n"); return;}catch(Exception e){ System.out.print("Error:"+e); } } } このプログラムでは,高さ100000[ ```ここに言語名を入力 ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

swordone👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/10/11 04:53

質問テンプレートの文言が多く残っています。要件に関係ないところは削るか項目を埋めてください。またソースコードはマークダウンのcode機能を利用してください。「初心者アイコン」があるのでそちらを活用し、質問本文内は要件のみに終始していただけると
guest

回答4

0

100で割ってfloorして100かければいいじゃないですか。

投稿2018/10/11 04:41

編集2018/10/11 04:58
kunai

総合スコア5405

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dice142

2018/10/11 04:55

roundでは切り捨てではないのでは。
madoka9393

2018/10/11 04:58

切り捨てなら「floor」ですかね。
kunai

2018/10/11 04:59

ご指摘ありがとうございます!質問文斜め読みしてroundとあったので、思考停止していました。 コメント編集しておきました。
shou_hitotose

2018/10/11 08:06

回答いただきありがとうございます!!
guest

0

ネタ

double a = 123.456; a -= (a % 100); System.out.printf("%5.0f", a);

元の数から100(指定の数)で割ったあまりを引く

投稿2018/10/12 00:00

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2018/10/12 00:58

案外ネタとも言えないような
shou_hitotose

2018/10/13 04:11

回答いただきありがとうございます!
pepperleaf

2018/10/13 04:53

精度は? C#ですが、 doubleで %演算したら、誤差で泣きました。 > 20 % 0.01 => 0.009999... 使えるから、と言って安易に使うものでは無かった。
退会済みユーザー

退会済みユーザー

2018/10/13 05:39

まあ2のべき乗だけの足し算だけで表せない数はそうなりますね。 整数側で切り捨てするのはほぼ100%のはず 小数点以下で切り詰めると丸め誤差同士で計算される
swordone

2018/10/14 17:45

まあ2進法の浮動小数点で10進数の丸めをすること自体無理があるってことですな(締めにかかる)
guest

0

ベストアンサー

BigDecimalを使ってこんなこともできます。
0. 数値をBigDecimal.valueOfメソッドを使ってBigDecimalに変換
0. setScaleメソッドを使う。整数部下から2桁目を切り捨てるなら-2を引数に渡す。切り捨てを意味するRoundingModeも渡す
0. 必要に応じてBigDecimalからdoubleなどに変換

java

1import java.math.BigDecimal; 2 3class Ideone { 4 public static void main (String[] args) { 5 BigDecimal decimal = BigDecimal.valueOf(15743.8924151); 6 BigDecimal dec2 = decimal.setScale(-2, java.math.RoundingMode.FLOOR); 7 System.out.println(dec2.doubleValue()); // 15700.0 8 } 9}

setScaleの第1引数を変化させるとこうなる

java

1import java.math.BigDecimal; 2 3/* Name of the class has to be "Main" only if the class is public. */ 4class Ideone { 5 public static void main (String[] args) { 6 BigDecimal decimal = BigDecimal.valueOf(15743.8924151); 7 for (int i = -3; i <= 3; i++) { 8 System.out.println(String.format("i = %2d: ",i) + 9 decimal.setScale(i, java.math.RoundingMode.FLOOR).doubleValue()); 10 } 11 } 12}

i = -3: 15000.0
i = -2: 15700.0
i = -1: 15740.0
i = 0: 15743.0
i = 1: 15743.8
i = 2: 15743.89
i = 3: 15743.892

投稿2018/10/11 14:07

編集2018/10/12 02:39
swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

表示だけなら。

java

1double value = 15743.51328973; 2System.out.printf("%.0f00\n", value/100); 3//=> 15700

投稿2018/10/11 05:16

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shou_hitotose

2018/10/11 08:07

ありがとうございます。このやり方も参考にしたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問