- PR -

String.Formatの変換について

投稿者投稿内容
chibana
常連さん
会議室デビュー日: 2005/11/25
投稿数: 32
投稿日時: 2006-03-13 11:35
 みなさま、おつかれさまです!! 下のようなコードでString.Formatを使用し
 Double型からString型へ変換していますが小数点15桁目で四捨五入されてしまいます。
 四捨五入されずに変換することは可能でしょうか?
 もしくはDouble型からString型へ四捨五入されずに代入することはできますか?

Dim str As String
Dim dbl As Double
dbl = "0.1234567890123456789"
str = String.Format("{0:0##################################}", dbl)
 
 結果:0.123456789012346

 よろしくお願いします。
 
chibana
常連さん
会議室デビュー日: 2005/11/25
投稿数: 32
投稿日時: 2006-03-13 11:41
すいません!! 

コードの3行目は↓です

dbl = 0.12345678901234568
Yam
大ベテラン
会議室デビュー日: 2003/09/13
投稿数: 179
お住まい・勤務地: だんじり祭りの地
投稿日時: 2006-03-13 11:42
double型の有効桁数を超えてます。
string.Formatとは関係なく、代入した時点で丸められています。

_________________
音速の定時退社!
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-13 11:44
引用:

chibanaさんの書き込み (2006-03-13 11:35) より:

Double型からString型へ変換していますが小数点15桁目で四捨五入されてしまいます。


System.Double 型の有効桁数は「15〜16 桁程度」です。
なので、そもそも Double 型として扱うのが誤りだと思います。

引用:

Dim dbl As Double
dbl = "0.1234567890123456789"


そもそも「型」がおかしいですね。
文字列として dbl に格納しようとしています。
この時点で丸められるでしょう。

引用:

四捨五入されずに変換することは可能でしょうか?
もしくはDouble型からString型へ四捨五入されずに代入することはできますか?


現状のソースですと、dbl に格納した時点で値が期待通りになっていないので不可能です。
Double.ToString("R") する以前に、値がすでに丸められていますからね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-13 11:51
色々書いているうちにかぶりんこしてしまいましたね... (;_ _)

コード:

    Dim dbl As Double = 0.1234567890123456
    ' この時点で dbl = 0.12345678901234559

    ' 0.1234567890123456
    MessageBox.Show(dbl.ToString())

    ' 0.12345678901234559
    MessageBox.Show(dbl.ToString("R"))

    Dim dec As Decimal = 0.123456789012345678D

    ' 0.123456789012345678
    MessageBox.Show(dec.ToString())


とりあえず、投下してみます。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Yam
大ベテラン
会議室デビュー日: 2003/09/13
投稿数: 179
お住まい・勤務地: だんじり祭りの地
投稿日時: 2006-03-13 11:57
引用:

じゃんぬねっとさんの書き込み (2006-03-13 11:44) より:
引用:

Dim dbl As Double
dbl = "0.1234567890123456789"


そもそも「型」がおかしいですね。
文字列として dbl に格納しようとしています。


気付かなかった。。。orz
_________________
音速の定時退社!
chibana
常連さん
会議室デビュー日: 2005/11/25
投稿数: 32
投稿日時: 2006-03-13 12:30
Yamさん、じゃんぬねっとさん、ありがとうございます。

じゃんぬねっとさん、本当に毎回お世話になっています。m(..)m

dbl.ToString("R")の方法があるとは!!!

これでやってみようと思います。


chibana
常連さん
会議室デビュー日: 2005/11/25
投稿数: 32
投稿日時: 2006-03-13 12:41
 
 Yamさん、じゃんぬねっとさん

 MSDNライブラリでdbl.ToString("R")を調べました。
 Rはラウンドトリップ数値書式指定なんですね。
 最大で17桁まで設定されるそうで。

 であれば十分です。勉強になりました!!

スキルアップ/キャリアアップ(JOB@IT)