• ベストアンサー

文字列で小数点以下の0を削除したい

「0.987000」とか「12.345670」などのように 小数点6桁目まで0埋めされた入力データがあります。 これの右の0を取った文字列を作成したいのですが 数値の誤差なく取る方法はあるでしょうか? 思いついたのは、「CDblしてCStrする。」です。

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1416)
回答No.2

ちょっと変な方法 '===その1=== Dim Script, HENSU, KEKKA Set Script = CreateObject("ScriptControl") Script.Language = "JavaScript" HENSU = "0.987000" KEKKA = Script.Eval("'" & HENSU & "'.replace(/0+$/g,'');") '===その2=== Dim RegExp, HENSU, KEKKA Set RegExp = CreateObject("VBScript.RegExp") RegExp.Pattern = "0+$" HENSU = "0.987000" KEKKA = RegExp.Replace(HENSU, "") いずれもKEKKAには"0.987"が入ります。 replaceは文字列の置換、"0+$"は「後方に1回以上連続する"0"」を 意味します。つまり、後方に連続する"0"を空文字に置換するという 操作です。文字列操作なので、誤差は出ません。 但し、"0.000000"は"0."になります。 前者はJavaScriptで、文字列オブジェクトが持っているメソッドを 正規表現で使う方法です。JavaScriptなので、大文字小文字は区別 します。".Replace"などと記述するとエラーになります。 後者はVBScriptが持つ正規表現オブジェクトを使う方法です。 VBなので、プロパティやメソッド名の大文字小文字は区別しません。 個人的には後者の方が本格的かなと思います。参考までに・・・

taku_pon
質問者

お礼

ありがとうございます。 1つ条件を忘れていました。 作っている環境はVB6です。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • nda23
  • ベストアンサー率54% (777/1416)
回答No.3

VB6でもVB.NET系(VB2003,VB2005,VB2008)でも動きます。 VB.NETの場合、自動的に"Set"は外されますけどね。 「その1」はVBで作るオブジェクト(ScriptControl)の中で JavaScriptを走らせる方法で、JavaScriptに馴染が薄い場合は 何をやってるか分かり難いかも知れません。 実行したスクリプトは以下の通りです。=の左辺を受け取っています。 ="0.987000".replace(/0+$/g,""); 「その2」はVBで作る正規表現オブジェクトを使って操作しています。 オブジェクト自体は作成元言語の違い(VB6/VB.NET系)には影響され ません。このオブジェクトはCreateObjectの他に参照設定を変更して Newキーワードで作る方法もありますし、VB.NET系では専用のクラスも あるのですが、最もシンプルで、移植性が高く、参照設定をイジる 必要もないので、私は愛用しています。

すると、全ての回答が全文表示されます。
  • OKbokuzyo
  • ベストアンサー率43% (130/296)
回答No.1

>思いついたのは、「CDblしてCStrする。」です。 その方法でもいいと思います。 他には、Stringクラスのsplitメソッドを利用して、 取得した配列の0番目でも良いかと思います。

すると、全ての回答が全文表示されます。

関連するQ&A