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

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

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

Re[7]: Decimalの文字列変換


(過去ログ 90 を表示中)

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

■53629 / inTopicNo.1)  Decimalの文字列変換
  
□投稿者/ ミラ (1回)-(2010/09/21(Tue) 15:07:36)

分類:[ASP.NET (VB)] 

いつもお世話になっています

Decimal型の変数を途中で浮動小数点型(Valを使わない)に変換せずに文字列に変換しようとしています

ここで下記のようなコードを書いた場合

Dim a As Decimal
Dim b As Decimal
Decimal.TryParse("100.00", a)
Decimal.TryParse("100.01", b)

Dim c As String = a.ToString
Dim d As String = b.ToString

cの値が"100.00"になります

複雑な文字列の演算を行わずに
cの値を"100",dの値を"100.01"にする方法はあるでしょうか?

VB2005のWebアプリケーションで開発を行っています

引用返信 編集キー/
■53630 / inTopicNo.2)  Re[1]: Decimalの文字列変換
□投稿者/ よねKEN (614回)-(2010/09/21(Tue) 15:38:37)
よねKEN さんの Web サイト
No53629 (ミラ さん) に返信
> 複雑な文字列の演算を行わずに
> cの値を"100",dの値を"100.01"にする方法はあるでしょうか?

小数部が最大で2桁しかないのであれば、aもbも以下のようにToStringメソッドを呼び出せばよいでしょう。

a.ToString("#.##")
b.ToString("#.##")

引用返信 編集キー/
■53631 / inTopicNo.3)  Re[2]: Decimalの文字列変換
□投稿者/ ミラ (2回)-(2010/09/21(Tue) 15:44:49)
No53630 (よねKEN さん) に返信
> ■No53629 (ミラ さん) に返信
>>複雑な文字列の演算を行わずに
>>cの値を"100",dの値を"100.01"にする方法はあるでしょうか?
>
> 小数部が最大で2桁しかないのであれば、aもbも以下のようにToStringメソッドを呼び出せばよいでしょう。
>
> a.ToString("#.##")
> b.ToString("#.##")

ご回答ありがとうございます
しかし桁は固定ではないです(何桁を入力されるかわからない状態)
引用返信 編集キー/
■53632 / inTopicNo.4)  Re[1]: Decimalの文字列変換
□投稿者/ shu (52回)-(2010/09/21(Tue) 15:49:52)
No53629 (ミラ さん) に返信
可変なら
.ToString("G")かな?


引用返信 編集キー/
■53633 / inTopicNo.5)  Re[2]: Decimalの文字列変換
□投稿者/ ミラ (3回)-(2010/09/21(Tue) 15:59:48)
No53632 (shu さん) に返信
> ■No53629 (ミラ さん) に返信
> 可変なら
> .ToString("G")かな?

ご回答ありがとうございます
VB2005,2010両方試しましたが戻り値は"100.00"でした

コードに問題があるようでしたらご指摘お願いします
Dim a As Decimal
Dim b As Decimal
Decimal.TryParse("100.00", a)
Decimal.TryParse("100.01", b)

Dim c As String = a.ToString("G")
Dim d As String = b.ToString("G")
引用返信 編集キー/
■53634 / inTopicNo.6)  Re[3]: Decimalの文字列変換
□投稿者/ Hongliang (713回)-(2010/09/21(Tue) 16:00:43)
G に精度指定子 0 を付けた G0 でお望み通りの書式化になるかな?
引用返信 編集キー/
■53635 / inTopicNo.7)  Re[4]: Decimalの文字列変換
□投稿者/ ミラ (4回)-(2010/09/21(Tue) 16:11:44)
No53634 (Hongliang さん) に返信
> G に精度指定子 0 を付けた G0 でお望み通りの書式化になるかな?

ありがとうございます。期待通りの結果がでました

そんなのどこに載ってるんだろうと思ったら載ってました。私の検索不足でしたm(__)m
http://msdn.microsoft.com/ja-jp/library/dwhawy9k(VS.80).aspx
解決済み
引用返信 編集キー/
■53636 / inTopicNo.8)  Re[5]: Decimalの文字列変換
□投稿者/ shu (53回)-(2010/09/21(Tue) 16:23:02)
No53635 (ミラ さん) に返信

ちなみに
> Decimal.TryParse("100.00", a)
> Decimal.TryParse("100.01", b)
ですが
a = 100.00D
b = 100.01D
と書けます。

解決済み
引用返信 編集キー/
■53647 / inTopicNo.9)  Re[6]: Decimalの文字列変換
□投稿者/ 魔界の仮面弁士 (1829回)-(2010/09/22(Wed) 01:45:35)
No53636 (shu さん) に返信
>>Decimal.TryParse("100.00", a)
>>Decimal.TryParse("100.01", b)
> ですが
> a = 100.00D
> b = 100.01D
> と書けます。

b はそれで良いですが、a はスケール ファクタが異なってきますよ。


C# のリテラル表記では、

  decimal a = 100.00M;
  decimal b = 100.0M;
  Console.WriteLine( a.ToString() );   // 100.00 になる
  Console.WriteLine( b.ToString() );   // 100.0  になる

と書けるのですが、VB の場合は後続ゼロが維持されず、下記のような結果となります。

  Dim a As Decimal = 100.00D
  Dim b As Decimal = 100.0D
  Dim c As Decimal = CDec("100.00")
  Dim d As Decimal = CDec("100.0")
  Console.WriteLine( a.ToString() )  '100    になる (100.00 ではない)
  Console.WriteLine( b.ToString() )  '100    になる (100.0  ではない)
  Console.WriteLine( c.ToString() )  '100.00 になる
  Console.WriteLine( d.ToString() )  '100.0  になる

解決済み
引用返信 編集キー/
■53651 / inTopicNo.10)  Re[7]: Decimalの文字列変換
□投稿者/ shu (55回)-(2010/09/22(Wed) 08:22:48)
No53647 (魔界の仮面弁士 さん) に返信
> ■No53636 (shu さん) に返信
> >>Decimal.TryParse("100.00", a)
> >>Decimal.TryParse("100.01", b)
>>ですが
>>a = 100.00D
>>b = 100.01D
>>と書けます。
>
> b はそれで良いですが、a はスケール ファクタが異なってきますよ。
>
>
> C# のリテラル表記では、
>
> decimal a = 100.00M;
> decimal b = 100.0M;
> Console.WriteLine( a.ToString() ); // 100.00 になる
> Console.WriteLine( b.ToString() ); // 100.0 になる
>
> と書けるのですが、VB の場合は後続ゼロが維持されず、下記のような結果となります。
>
> Dim a As Decimal = 100.00D
> Dim b As Decimal = 100.0D
> Dim c As Decimal = CDec("100.00")
> Dim d As Decimal = CDec("100.0")
> Console.WriteLine( a.ToString() ) '100 になる (100.00 ではない)
> Console.WriteLine( b.ToString() ) '100 になる (100.0 ではない)
> Console.WriteLine( c.ToString() ) '100.00 になる
> Console.WriteLine( d.ToString() ) '100.0 になる
コメントありがとうございます。
スケールファクタはそうかもしれないですが、Decimalのリテラル表現があるのに文字列をParseするのは
無駄かなと思ったしだいです。文字列のParseをしてなければ今回の問題はそもそも発生しなかったのですけど・・・
スケールファクタが揃っていると演算が多少早くなったりはするのかな?
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -