Ognacの雑感

木漏れ日々

目次

Blog 利用状況

書庫

ギャラリ

いまさらながら,わかった事。 ()付きの数字

今頃何言ってるのって突っ込まないでね。
 数字を "("/")"で挟んた文字列は数字と判定されます。
        Debug.Print(IsNumeric("(35.6)"))       ' strict Offの時は 実行可能, onの時は 型エラーになる

これは既知だったのですが、これを数値に変換すると、期待しない結果になりました。
 消費税の内税表記で "(456)"等の出力を扱う際に、"(",")" が付いたまま計算している部分があって、期待外の結果になっのです。
 (*) 文字列を計算している時点でバグなのですが、瓢箪から駒でした。


        Dim i0 As Integer = Int("(35.6)")  ' strict Offの時は 実行可能, onの時は 型エラーになる(
        Dim i1 As Integer = CInt("(35.6)")
        Dim i2 As Integer = DirectCast("(35.6)", Integer) '文字列からDecimalへの文法エラー
        Dim i3 As Integer = CType("(35.6)", Integer)
        Dim i4 As Integer = Integer.Parse("(35.6)")  '型Errorで例外発生


Dim i2 as Integer の行は、 構文ErrorでCompilerに怒られます。
他の  i1,i3,i4 は Compileできます。
  i0 はstrictの指定で変わります。
  i0,i1,i3 共に 値は -35.6 の負数になります。
i4の Parse は 例外が発生します。

うーん。MSDNを見ても それらしき記述はない ( 標準の数値書式指定文字列: http://msdn2.microsoft.com/ja-jp/library/dwhawy9k(VS.80).aspx )
        "(数字)"は負の表示の一つの形式...読んだ記憶はあるのだが、イザ探すとなると見つからないものです..orz
いずれしても、このような挙動をするのだから受け入れるしかないのですが、型変換子によって挙動が違うのは解せないなぁ。
(*)誤字訂正

投稿日時 : 2007年11月2日 19:55

Feedback

# re: いまさらながら,わかった事。 ()付きの数字 2007/11/02 23:38 RUN

> "(数字)"は負の表示の一つの形式...
とりあえず、Excelのセルの書式設定→分類:数値の
負の数の表示形式のリストボックスによると
-記号
赤文字
()括弧


と言った辺りが、負の表示形式みたいですね

# re: いまさらながら,わかった事。 ()付きの数字 2007/11/03 2:20 Ognac

そっか、Excelで見たんだ。
VBAの世界なら納得なんですが、通常言語でこれは...?
Locale指定で切り替えが.....できそうにないですしね。

# re: いまさらながら,わかった事。 ()付きの数字 2007/11/03 10:19 Streetw☆

NumberStylesの中にありますね。
Integer.Parse("(35.6)", System.Globalization.NumberStyles.AllowParentheses)
VisualBasic6でもできるから、互換性のために見えないところでがんばってるんだと思いますw

# re: いまさらながら,わかった事。 ()付きの数字 2007/11/03 11:23 Streetw☆

私の↑のコメント、知ったかぶりしてますけど、さっきたくさん調べて見つけましたw
補足ですけど、VisualBasic6では"100-"とかも大丈夫で、
じゃんぬさんとこ<http://jeanne.wankuma.com/tips/validation/isnumeric.html>を見たりするとNumberStyles.Anyが対応してるみたいですね~。

# re: いまさらながら,わかった事。 ()付きの数字 2007/11/03 11:25 Streetw☆

リンクが変になっちゃいました;;

# re: いまさらながら,わかった事。 ()付きの数字 2007/11/03 13:59 Ognac

情報、ありがとうございます。お手数かけさせて、ごめんなさい。
>NumberStylesの中にありますね。
ここですね。 http://msdn2.microsoft.com/ja-jp/library/system.globalization.numberstyles(VS.80).aspx

>VisualBasic6でもできるから、互換性のために見えないところでがんばってるんだと思いますw Remove Comment 105757
>VisualBasic6では"100-"とかも大丈夫で、
結局 旧VBの影響なんですね。
この辺りが、VBを懐が深いと見るか、アバウトと見るかは分かれる一因なんでしょうね。

# re: いまさらながら,わかった事。 ()付きの数字 2007/11/04 23:47 Ognac

消費税の内税を(9,999)形式で表示しているシステムもあるので、潜在バグになりそうな、危惧を抱きます。

タイトル
名前
Url
コメント