- PR -

容量計算のSQLロジックの質問(数学)

投稿者投稿内容
yangjiayi
ベテラン
会議室デビュー日: 2007/10/04
投稿数: 59
投稿日時: 2009-04-08 21:17
お世話になります。
デューンさん、platiniさん、コメントありがとうございます。

まず、あれは私のコビペーミスです。

50g(10g*5袋)+0.050kg(10g*5袋)+13袋(350g)
から
50g(5g*10)+0.050*1000g(5g*10)+13(350g)
に変換します。

それから、フリーテキストの話ですが、
実は、このロジックを実行する前に、ほかのSQL SERVER Functionがあり、あそこで、半角に変換したり、大文字を小文字にしたり、×、÷のような記号を*、/にしたりします。

で、
5g×13袋(65g)

13袋×5g(65g)
の話ですが、

5g×13袋(65g)
これの13袋は全部65gという意味で、5g×65gで計算します。

13袋×5g(65g)
通常10g(5g×2袋)、そういう場合、(5g×2袋)は内訳で、無視します。
5g(65g)の場合、意味は分からないですね。そいう場合は、13×5gで計算してしまいます。

>なぜこれが計算できない!瑕疵だ!
>と言われて、泥沼無限地獄にはまり込むような気がします。

今のところ、数字、小数点、+、×、(、)を仕様の前提条件として、設計しています。
本当フリーテキストの入力対応だったら、それは無理です。
デューン
大ベテラン
会議室デビュー日: 2004/04/21
投稿数: 174
お住まい・勤務地: Tokyo
投稿日時: 2009-04-09 01:31
掲示板に出てきていない仕様がいろいろ眠ってそうですが
(最初のパターンにしても「仮に」と言われたので回答できずにいる方もいるのでは・・・)

とりあえず私やplatiniさんが心配しているのは、
開発者の思い込みでパターンを絞ると手痛いしっぺ返しが返ってくることが多い
という経験則からの老婆心だけです。


# 人の名前借りて言いきっちゃいました、platiniさん、すいません^^;

[ メッセージ編集済み 編集者: デューン 編集日時 2009-04-09 01:32 ]
yangjiayi
ベテラン
会議室デビュー日: 2007/10/04
投稿数: 59
投稿日時: 2009-04-09 07:20
引用:

デューンさんの書き込み (2009-04-09 01:31) より:
掲示板に出てきていない仕様がいろいろ眠ってそうですが
(最初のパターンにしても「仮に」と言われたので回答できずにいる方もいるのでは・・・)

とりあえず私やplatiniさんが心配しているのは、
開発者の思い込みでパターンを絞ると手痛いしっぺ返しが返ってくることが多い
という経験則からの老婆心だけです。


# 人の名前借りて言いきっちゃいました、platiniさん、すいません^^;

[ メッセージ編集済み 編集者: デューン 編集日時 2009-04-09 01:32 ]


デューンさん
コメントありがとうございます。
バターンが多いこと、想像でも思いつかないこと、など、すでに基本設計してくれた方にリクエストを上げています。
こっちは詳細設計を作るほうで、基本設計でそんなにいろんなバターンを考慮していないようで、PGに基本設計書のままを出すなんて、PG側も作れないですね。
基本設計を詳細設計に落とすときに、やはりPGの立場から考慮しなければいけないと思っています。それは正しいですよね?

今回のケースでは、基本設計範囲で、数字、小数点、+、×、括弧、という制約の前提で、詳細設計を落としています。

フリーテキストの場合、PGどころか、詳細設計も書けないと思いますね。
デューン
大ベテラン
会議室デビュー日: 2004/04/21
投稿数: 174
お住まい・勤務地: Tokyo
投稿日時: 2009-04-09 11:06
入力の際にブロックするのがベターだと思ってます。

都合上それは無理なのだという前提として
引用:

基本設計を詳細設計に落とすときに、やはりPGの立場から考慮しなければいけないと思っています。それは正しいですよね?


私レベルが偉そうに言ってしまっていいのかわかりませんが、1技術者の意見としてご参考までに。
現場の流儀にもようるでしょうし、PGの立場でというのがどの範囲を想像されているのかわかりませんが、私の場合は何は実現できて、何は実現できないのかをはっきりさせて、リーダーやお客さんと相談したりします。
ある程度コードでの実現性は考慮しますが、まずは論理レベルでの実現性を考えますね・・・
今回のケースなら各トークンの説明とか解決順とか無視される条件(内訳として無視する)とか

たとえば
1.[数値]g または [数値]kg に続く開け括弧は、内訳として判断され対応する閉じ括弧まで無視される。
2.演算子に続く開け括弧は、対応する閉じ括弧まで処理される。
3.[数値]g , [数値]kg, 演算子 いずれでもない文字列に続く開け括弧は直前の文字列が内訳であると判断し、直前の文字列を無視し、閉じ括弧までを採用する。
など。

で、この段階ですでに
「3のケースで括弧内にgとかkgがないとどうなるの?」
「内訳の方が正しい場合はどうなるの?」
などの疑問が出てきてますね。


引用:

フリーテキストの場合、PGどころか、詳細設計も書けないと思いますね。


フリーテキストだから無理なのではなくて、
フリーテキストの場合なら「こういうのはすくえる。」「こういうのはすくえない(すくわない)のでこういう警告が出る。」「こういうのはエラーとして処理される。」というようなことを明記するのが設計だと思ってます。
(承認されるかどうかはまた別の問題として)



# 何か起きたときに全責任が自分に振ってこないようにしておくことも考えておいてください。
# 上長に承認させるとかお客さんに承認させるとか。

platini
大ベテラン
会議室デビュー日: 2002/12/03
投稿数: 193
投稿日時: 2009-04-09 12:46
引用:

とりあえず私やplatiniさんが心配しているのは、
開発者の思い込みでパターンを絞ると手痛いしっぺ返しが返ってくることが多い
という経験則からの老婆心だけです。
# 人の名前借りて言いきっちゃいました、platiniさん、すいません



いえ、同感です。

なお、客先承認を取る場合は、

これこれこういう仕様で計算する。計算不能エラー相当パターンは以下の通り

とやるより

これこれこういう仕様で計算する。計算可能正常パターンは以下の通り。
以下以外のパターンは全てエラー扱い。


として承認を取るほうがよいかもしれないですね。

エラー相当パターンを明示して承認を受けるパターンだと、
列挙候補以外は全部計算可能とみなされ、
想像の限界枠内から漏れていたパターンで、しかし、
正常系と解釈できなくもないパターンが出現し、泥舟になりそう・・・。

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2009-04-10 12:00
引用:

yangjiayiさんの書き込み (2009-04-03 19:42) より:
現在、SQL文で、容量計算のロジックを設計しています。
求めているのがグラム(g)の結果です。

仮に、以下のバターンがあります。

「1.8kg」
「250g+50g」
「70g×2」
「(150g×2)×2」
「(130g+20g)×3」
「100g(1人前)×4」


これは、わかります。

引用:

yangjiayiさんの書き込み (2009-04-08 21:17) より:
5g×13袋(65g)
これの13袋は全部65gという意味で、5g×65gで計算します。


単位が変わります。長さで言うと、「長さを求めたいのに面積になった」状態です。
どうやって単位を戻しましょう?
yangjiayi
ベテラン
会議室デビュー日: 2007/10/04
投稿数: 59
投稿日時: 2009-04-12 16:57
引用:

Jittaさんの書き込み (2009-04-10 12:00) より:
引用:

yangjiayiさんの書き込み (2009-04-03 19:42) より:
現在、SQL文で、容量計算のロジックを設計しています。
求めているのがグラム(g)の結果です。

仮に、以下のバターンがあります。

「1.8kg」
「250g+50g」
「70g×2」
「(150g×2)×2」
「(130g+20g)×3」
「100g(1人前)×4」


これは、わかります。

引用:

yangjiayiさんの書き込み (2009-04-08 21:17) より:
5g×13袋(65g)
これの13袋は全部65gという意味で、5g×65gで計算します。


単位が変わります。長さで言うと、「長さを求めたいのに面積になった」状態です。
どうやって単位を戻しましょう?




こんにちは。Jittaさん
重量計算なので、重量以外の記号があったら、計算しない前提とします。
ですから、kg、gが付いている文字列のみ、処理していく感じですね。
よっしー
大ベテラン
会議室デビュー日: 2007/05/17
投稿数: 143
投稿日時: 2009-04-13 09:54
yangjiayiさん、こんにちは。
引用:

yangjiayiさんの書き込み (2009-04-12 16:57) より:
重量計算なので、重量以外の記号があったら、計算しない前提とします。
ですから、kg、gが付いている文字列のみ、処理していく感じですね。


5×65gならわかるけど、5g×65gはわからないという意味ではないでしょうか?

スキルアップ/キャリアアップ(JOB@IT)