C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

文字列を小数点ありに変換して計算

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■94063 / inTopicNo.1)  文字列を小数点ありに変換して計算
  
□投稿者/ KEITA (1回)-(2020/03/10(Tue) 13:56:07)

分類:[VB.NET/VB2005 以降] 

最近、VISUALBASICを使い始めました。

@文字列「001250」を「12.50」という数値に変換
A変換後の「12.50」に3をかけて「37.50」という数値を出したい

上記のことを行いたいですがうまくいきません。

Aのかける数字の「3」は元は文字列です。
分からないなりにDecimal型を使ったり、.ToString("F2")で変換掛けたりなどやっているのですが、
一向に望んだ結果が得られません
引用返信 編集キー/
■94064 / inTopicNo.2)  Re[1]: 文字列を小数点ありに変換して計算
□投稿者/ 魔界の仮面弁士 (2598回)-(2020/03/10(Tue) 14:38:38)
No94063 (KEITA さん) に返信
> @文字列「001250」を「12.50」という数値に変換

固定長6桁の数字が並んでいて、そのうち
左4桁が整数部、右2桁が小数部という変換ルールで良いのなら、こんな感じ。

Dim s As String = "001250"
Dim d As Decimal = CDec(s) / 100D

数字以外(空文字列など)が渡される可能性がある場合は、
CDec ではなく Decimal.TryParse メソッドの利用をお奨めします。


ただし上記のように 100d で割った場合、
12.50 ではなく 12.5 が生成されます。(数値としては同じですが)

12.50 という値として得たい場合には、小数点記号を自分で補って
 Dim d As Decimal = CDec(s.Substring(0, 4) & "." & s.Substring(4))
あるいは
 Dim d As Decimal = CDec(s.Substring(0, 4) & System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator & s.Substring(4))
などとします。


> A変換後の「12.50」に3をかけて「37.50」という数値を出したい

d *= 3D
引用返信 編集キー/
■94066 / inTopicNo.3)  Re[2]: 文字列を小数点ありに変換して計算
□投稿者/ 魔界の仮面弁士 (2600回)-(2020/03/10(Tue) 14:51:13)
No94064 (魔界の仮面弁士) に追記
> ただし上記のように 100d で割った場合、
> 12.50 ではなく 12.5 が生成されます。(数値としては同じですが)


0.01 倍するのが手っ取り早そうです。

Dim d As Decimal = CDec(s) * 0.01D
' Dim d As Decimal = CDec(s) * CDec("0.01")


もしくは、被除数を「小数点以下 2 桁」にしておいてから割るのも良さそう。

Dim s As String = "001250"
Dim d As Decimal = CDec(s & ".00") / 100D


なお、除数側に小数桁を付与するのは駄目なようです。
下記は 12.50 ではなく 12.5 が得られます。

'Dim d As Decimal = CDec(s) / CDec("100.00")
'Dim d As Decimal = CDec(s) / CDec("100.0000")
引用返信 編集キー/
■94067 / inTopicNo.4)  Re[3]: 文字列を小数点ありに変換して計算
□投稿者/ KEITA (2回)-(2020/03/10(Tue) 15:13:19)
No94066 (魔界の仮面弁士 さん) に返信
> ■No94064 (魔界の仮面弁士) に追記
>>ただし上記のように 100d で割った場合、
>>12.50 ではなく 12.5 が生成されます。(数値としては同じですが)
>
>
> 0.01 倍するのが手っ取り早そうです。
>
> Dim d As Decimal = CDec(s) * 0.01D
> ' Dim d As Decimal = CDec(s) * CDec("0.01")
>
>
> もしくは、被除数を「小数点以下 2 桁」にしておいてから割るのも良さそう。
>
> Dim s As String = "001250"
> Dim d As Decimal = CDec(s & ".00") / 100D
>
>
> なお、除数側に小数桁を付与するのは駄目なようです。
> 下記は 12.50 ではなく 12.5 が得られます。
>
> 'Dim d As Decimal = CDec(s) / CDec("100.00")
> 'Dim d As Decimal = CDec(s) / CDec("100.0000")

こちらの方法で試したところ、うまくいきました。
ありがとうございました。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ