アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (3件)

ちょっと変な方法


'===その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なので、プロパティやメソッド名の大文字小文字は区別しません。
個人的には後者の方が本格的かなと思います。参考までに・・・
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/04/17 06:57

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系では専用のクラスも
あるのですが、最もシンプルで、移植性が高く、参照設定をイジる
必要もないので、私は愛用しています。
    • good
    • 0

>思いついたのは、「CDblしてCStrする。

」です。

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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A