見出し画像

プログラマ的「+」の考え方

あるTLで以下のような小学校の算数でAとBを求める問題があった

      BBA
+      AA
-----------
       ABB

この答は以下のような繰り上がりを意識したら簡単に解ける。

一の位:A+A     =10 + B
十の位:1+A+B = 10 + B
百の位:1+A      = B

A = 10-1 → 9
B =  A-1  → 8

と・・・うん。思いっきり算数の問題。

である方が両方が同じ数字ではないとは書かれてないから両方「0」でも答えになると言うのを見て・・・

ちょいちょいちょい・・・待って・・・っとPGは思ったのです。

数値には前ゼロ付きませんよ。ってね。
[000] は数値ではなく数字です。細かくてごめんねw

000 + 00 = ?

JavaScriptの場合: 000 + 00 = 00000

文字列連結されますので、「000」と「00」がくっ付く。

Javaの場合:場合によってはException。

数値として扱ってる変数内に文字列を変換かけずに入れたら型が違うと怒られて論理エラーが返ってきます。

数値に変換した場合は「0」と返します。「000」とは返ってきません。

Perlの場合:こ奴はその辺すんげぇあいまいw

普通に数字と判断して勝手に変換かけて数値にして「0」って返してくれますw

※数字ではなく文字が入ったら・・・計算はもちろんできません。

文字列連結の場合 [.] を使うのでw
あ、数字やん、これ「0」やなって判断してくれるというwww

まぁ実装側としてはあいまいさが残ると予期せぬバグが紛れ込むので厳格にJavaのような答えを返してくれるのが理想です。
例外(Exception)はすべて拾って例外時の処理に投げたいのでw。

ってことで 000+00=00000 または数値変換した場合 0+0=0 なので答えの桁数と合わないから答えとして成立しない。が結論。

この辺、うるさいっす。めちゃくちゃ。

前ゼロの有り無しは明示的にお願いしたいし、数値ではありえない←

電話番号や郵便番号は数字を使った文字列だからな!


追記:

PGで3桁、前ゼロをつけて出す方法あるやん!答えが「000」でもありなんちゃうん?って???

はいもちろんありますよ。文字列を固定長にして足りない桁数の前に「0」をつけて出す処理。

けどそれって、上記の足し算だけの記載では無理です。

そもそも普通に数値で考える問題に前ゼロで数字するのは正しい答えではないよね。算数の問題だもん。