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

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

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

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

2403閲覧

Unity c#のfloatについて

akki

総合スコア91

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2016/02/17 03:33

UnityでC#を使い以下のような計算をしました。
public float Note_end_point_x = -9;
public float Note_end_point_y = 0.2585f;
float V_point_graf = 0;
float minus_jct = -8.7415f;

V_point_graf = (-1) * Note_end_point_x + minus_jct;

要するに
y = (-1) * -9 + (-8.7415)という計算になり答えは0.2585になるはずですが、
0.2585001となってしまいます。
これ自体はfloat型を使用することによる誤差ということらしいのですが、
これを正しい答えに補正する方法がわかりません。
小数点指定桁で切り捨てる処理ができればいいのですが上手い方法が見つかりません。
解決策をご教授いただけませんでしょうか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

何を持って正しいとするのかというツッコミはさておき、この手の問題でよくある一つの手としてはfloatでなくdecimalをつかってみるとか。下にはvarって書いてますが、decimalって直接指定しても良いと思います。数値の後ろにmって付ければdecimalとして扱われます。

var Note_end_point_x = -9m;
var V_point_graf = 0m;
var minus_jct = -8.7415m;

投稿2016/02/17 04:19

nkoriyama_kick

総合スコア28

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

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

0

自己解決です。
この場合必要な小数点以下の値が決まっていたので
10000倍して必要な値の部分を整数部分にする
Mathf.Floorを使用して小数点以下を切り捨てる
1/10000して桁数を元に戻す
としてとりあえず解決しました。
V_point_graf = (-1) * Note_end_point_x + minus_jct;
V_point_graf = V_point_graf * 10000;
V_point_graf = Mathf.Floor(V_point_graf);
V_point_graf = V_point_graf/10000;

これで上記の場合0.2585になりました。

投稿2016/02/17 04:15

編集2016/02/17 04:16
akki

総合スコア91

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問