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

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

新規登録して質問してみよう
ただいま回答率
85.46%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

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

Q&A

解決済

1回答

742閲覧

unity C# ドットの重複を解決したい

koron4321A

総合スコア1

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

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

0グッド

0クリップ

投稿2021/04/30 04:04

前提・実現したいこと

unityでアプリを作りたくて独学で勉強しています。
プログラミング基本の応用としてunityで、上段に式を、下段に答えを表示する電卓を作っているのですが、式で右側に表示するドットの重複の修正のやり方がわかりません。
また、なぜこうなるのか教えて頂けると助かります。
知識はC#・unityとも初心者向け書籍を数冊読んだ程度です。
ご教授お願いします。
イメージ説明

発生している問題・エラーメッセージ

//”.”クリック3回目、"a"のクリック2回目で”.”以下のエラーが出ます。 エラーメッセージ FormatException: Input string was not in a correct format. System.Number.ParseSingle (System.String value, System.Globalization.NumberStyles options, System.Globalization.NumberFormatInfo numfmt) (at <437ba245d8404784b9fbab9b439ac908>:0) System.Single.Parse (System.String s, System.Globalization.NumberStyles style, System.Globalization.NumberFormatInfo info) (at <437ba245d8404784b9fbab9b439ac908>:0) System.Single.Parse (System.String s) (at <437ba245d8404784b9fbab9b439ac908>:0) 以下略

該当のソースコード

using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Linq; using UnityEngine.UI; using System.Text.RegularExpressions; public class Main : MonoBehaviour { public Text Formula;//式入力テキスト public Text Answer;//答えテキスト public Button[] bNumber;//数字ボタン public Button minus;//マイナスボタン public Button plus;//プラスボタン public Button dot;//ドットボタン public Button divide;//割るボタン public Button rate;//割合ボタン public Button hung;//掛けるボタン public Button breturn;//1つ戻るボタン public Button equal;//イコールボタン public Button clear;//クリアボタン // Start is called before the first frame update void Start() { Formula.text = ""; Answer.text = ""; } char[] c = new char[] {'+', '-', '×', '÷', '%' }; //中略 public void InputDot(Text dotButton)//ドット { if (Formula.text.Contains("-") || Formula.text.Contains("+") || Formula.text.Contains("÷") || Formula.text.Contains("×") || Formula.text.Contains("%")) { string[] inputString = Formula.text.Split(c);//Splitで記号で分割 float rightNumber = float.Parse(inputString[1]);//記号より右の数字を取り出す string rig = rightNumber.ToString();//右の数字flostを文字列stringに変換 if (rig.Contains("."))//右側の数字にドットがあればスルー、なければ記入 { return; } else { Formula.text += "."; return; } } else if (Formula.text ==""|| Formula.text.Contains("."))//何もない時又は"."がある時は記入しない { return; } else { Formula.text += dotButton.text; return; } } //以下略 }

試したこと

if (rig.Contains("a"))//右側の数字にドットがあればスルー、なければ記入 { return; } else { Formula.text += "a"; return; }

”.”の部分を”a”にすると”3.3+3a3”となり重複しませんが、2クリック目に上記のエラーがでます。
この変化の理由がわかりません。

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

unity2019.3 1f1personal
visual studio2017 15.9.16l

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

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

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

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

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

guest

回答1

0

ベストアンサー

c#

1string[] inputString = Formula.text.Split(c);//Splitで記号で分割 2float rightNumber = float.Parse(inputString[1]);//記号より右の数字を取り出す 3string rig = rightNumber.ToString();//右の数字flostを文字列stringに変換

の部分で、

inputString[1]が「3.」の場合、rigは「3」になるのでは?
inputString[1]が「3..」の場合は、発生しているエラー「FormatException」になるかと。

string rig = inputString[1];で十分な気がします。

投稿2021/04/30 07:31

編集2024/04/19 11:55
satokei

総合スコア1217

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

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

koron4321A

2021/04/30 10:00 編集

回答ありがとうございました! 教えて頂いた内容で重複が解決しました。 ご教授ありがとうございました。 ``` string[] inputString = Formula.text.Split(c); string rig = inputString[1]; ```
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問