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

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

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

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

Q&A

解決済

5回答

1894閲覧

税込/税抜計算時の誤差について

KazuhitoiKodama

総合スコア11

Java

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

0グッド

0クリップ

投稿2016/12/26 04:01

お世話になります。
すみません、一般的に、

・N1.08の四捨五入
・((N
1.08の四捨五入)/1.08)の四捨五入

の結果が異なるものになるNはございますでしょうか。
税込金額の税はがし時の誤差が発生しうるかを知っておきたく。

お知恵・ご経験のあるかた、ご教示いただけますと幸いです。

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

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

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

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

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

ozwk

2016/12/26 04:43

四捨五入はどの桁を丸めるんですか?
guest

回答5

0

自分で計算してみればいいじゃろう

java

1/* package whatever; // don't place package name! */ 2 3import java.util.*; 4import java.lang.*; 5import java.io.*; 6 7/* Name of the class has to be "Main" only if the class is public. */ 8class Ideone 9{ 10 public static void main (String[] args) throws java.lang.Exception 11 { 12 float tax = 1.08F; 13 for (int i = 0; i< 300; i++) { 14 float i2 = i; 15 int j = (int)( (i2 * tax)/tax); 16 int k = Math.round( Math.round(i2 * tax)/tax); 17 if (i != j) { 18 System.out.printf("[j] i=%d %n", i); 19 } 20 if (i != k) { 21 System.out.printf("[k] i=%d %n", i); 22 } 23 } 24 } 25}

投稿2016/12/26 04:20

編集2016/12/26 06:51
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ozwk

2016/12/26 04:29

じいさんや、キャストでは四捨五入じゃなくて切り捨てじゃないかのぅ?
carimatics

2016/12/26 04:35

あと改行は\nですな
swordone

2016/12/26 05:12

それと割り算の時にも四捨五入(0.5足してキャスト)しないといけないんじゃないかのう?
退会済みユーザー

退会済みユーザー

2016/12/26 06:46

printf 改行用 : %nとすることで'\n'環境も'\r'環境も"\r\n"環境も区別せずに改行出来る
退会済みユーザー

退会済みユーザー

2016/12/26 06:52 編集

キャストはそういえば四捨五入ではなく切り捨てだったのう
carimatics

2016/12/26 13:19

Javaのprintfでは%nが使えるんですね。 まったく知りませんでした。 ご指摘感謝致します
guest

0

すみません。

・N
・((N*1.08の四捨五入)/1.08)の四捨五入

の間違いでした。

投稿2016/12/31 01:51

KazuhitoiKodama

総合スコア11

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

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

0

1なんかどうですか。

(追記)
切り捨てと間違えました。ごめん

投稿2016/12/27 04:53

編集2016/12/27 05:46
ikedas

総合スコア4315

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

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

ikedas

2016/12/27 04:55

回答は10文字以上でないと受け付けられないことを知った。
guest

0

ベストアンサー

質問の条件を「Nと、N*1.08を四捨五入したものを1.08で割って四捨五入したものが一致」と読み替えます。
便宜上、最初の金額をx円、それを1.08倍して四捨五入したものをy円とします。
最初に、xとyの条件式を書くと、yは
y - 1/2 ≦ x * 108/100 < y + 1/2
を満たす自然数ということになります。これをyについて整理すると、
x * 108/100 - 1/2 < y ≦ x * 108/100 + 1/2
となります。この辺々を1.08で割る、つまり100/108を掛けると
x - 50/108 < y * 100/108 ≦ x + 50/108
となります。50/108 < 1/2なので、
x - 1/2 < y * 100/108 < x + 1/2
が成立します。つまり、y * 100/108を四捨五入すると、必ずxと一致します。

もし税率計算が切り捨てだった場合、最初の条件が
y ≦ x * 108/100 < y + 1
になります。以下同様の計算をすると、
x - 100/108 < y * 100/108 ≦ x
となります。つまり最初の条件の等号が成立するとき(x * 108/100が自然数になるときで、すなわちxが25の倍数のとき)以外は切り捨てが発生し、最初の値段より1円安くなります。

投稿2016/12/26 15:04

編集2016/12/26 15:17
swordone

総合スコア20651

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

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

swordone

2016/12/31 02:13

あ、後から気づきましたが、最後のパターンは「切り上げ」すれば一致しますね。
guest

0

山ほどありますね。そもそも、一致する方が少ない。
もしかして、

・N

・((N*1.08の四捨五入)/1.08)の四捨五入
の結果が異なるものになるNはございますでしょうか。

の書き間違いでしょうか?であれば、1千万円までにはないようです。

投稿2016/12/26 05:20

otn

総合スコア84499

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

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

otn

2016/12/26 05:22

ただ、税込み額が「N*1.08の四捨五入」というのはあまり見ないですが。少なくとも小売りでは切り捨てですよね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問