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

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

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

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

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

リファクタリング

リファクタリングとはコードの本体を再構築するための手法であり、外見を変更せずに内部構造を変更/改善させることを指します。

Q&A

解決済

1回答

939閲覧

プロパティの定義がそのクラスに合っているのかどうか、アンダーフロー発生後の処理

Yuuxxx

総合スコア5

C#

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

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

リファクタリング

リファクタリングとはコードの本体を再構築するための手法であり、外見を変更せずに内部構造を変更/改善させることを指します。

0グッド

0クリップ

投稿2019/08/28 16:04

独学で勉強をしており、win10の電卓を真似た電卓を作成してみました。
現在コードを一通り書き終えて、リファクタリングをしているのですが、Form1クラスにユーザーが入力した値を代入するValueプロパティを定義しています。
そしてForm1クラスとは別にCalculationクラスという計算処理を担うクラスを作成しました。
MVCのモデルの説明を見ていると

そのアプリケーションが扱う領域のデータと手続き(ビジネスロジック - ショッピングの合計額や送料を計算するなど)を表現する要素である。

と説明されていたのですが、ValueプロパティはCalculationクラスに移動すべきなのでしょうか?

それともう1つ、アンダーフローが発生した場合(0に近いが0でない小さな数字が、0として表示される、という認識でいいでしょうか?)

public bool IsUnderflow(decimal v1, decimal v2, string op) { if ((v1 != 0 && v2 != 0) && (op == "×" || op == "÷") && (Calculate(v1, v2, op) == 0)) return true; return false; }

というメソッドを作成してTrueの場合にOverFlowExceptionを発生させているのですが、冗長に感じます。
私の調べ方が悪いのか、調べてもこれといって情報が無かったのですがもう少し簡潔な処理はないでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

MVCと変数の定義はあんまり関係ないというか、Valueの使い方次第だと思います
場合によっては両方がValueを持つこともあるでしょう

10^-100=0とか10^100+10^-100=10^100とかがアンダーフローですね
小さすぎる値が0とみなされる現象です

スッキリとした書き方以前に「何が問題なのか」がはっきりしていないように見えます
単にアンダーフローが発生したとき検出したい、なのであれば、
問題の本質は正しい値とズレている、ということなので、
計算そのものを自作し、ズレる原因が起こるかで検出するしかないと思います

投稿2019/08/29 02:50

izmktr

総合スコア2856

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

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

Yuuxxx

2019/08/29 10:51

言われてみると確かに、表面上の問題だけで本質的な部分が見えていませんでした。 izmktrさんに指摘された事を忘れず、これからも問題解決に取り組んで行きたいと思います。 迅速かつ丁寧な回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問