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

わんくま同盟

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

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

■85972 / 6階層)  指数表記された文字列の数値変換方法について
□投稿者/ 魔界の仮面弁士 (1496回)-(2017/12/06(Wed) 14:16:57)
2017/12/06(Wed) 15:09:54 編集(投稿者)
2017/12/06(Wed) 14:45:33 編集(投稿者)

No85970 (Hongliang さん) に返信
> で、ToDecimalは、指数部が1以上持つ値に対するケアができていない、ただの実装バグに見えますね。
バグっぽいですね。

> 回避策は…UnscaledValue, Scaleとかで自前計算するとか。
ひとまず、これでどうでしょう。

internal static class BigDecimalExtensions
{
 public static decimal ToDecimalValue(this BigDecimal d)
 {
  return d.Add(BigDecimal.Zero, MathContext.Unlimited).ToDecimal();
 }
}

---
上記を追試してみましたが、Unlimited で補正できるものじゃないですね。
もっと根本的に、ToDecimal の実装そのものを見直さないと駄目っぽい。

string s = decimal.MaxValue.ToString(); // "79228162514264337593543950335"

BigDecimal b = BigDecimal.Parse(s);
decimal d = b.ToDecimal(); // Decimal.MinusOne を返す!


---
手抜き実装ですが、これだとどうでしょう。

internal static class BigDecimalExtensions
{
 public static decimal ToDecimalValue(this BigDecimal d)
 {
  return Decimal.Parse(d.ToPlainString());
 }
}
編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[5]: 指数表記された文字列の数値変換方法について /Hongliang →Re[7]: 指数表記された文字列の数値変換方法について /たかじ
 
上記関連ツリー

指数表記された文字列の数値変換方法について / たかじ (17/11/28(Tue) 17:28) #85832
Re[1]: 指数表記された文字列の数値変換方法について / WebSurfer (17/11/28(Tue) 18:07) #85833
Re[1]: 指数表記された文字列の数値変換方法について / 魔界の仮面弁士 (17/11/29(Wed) 09:42) #85853
  └ Re[2]: 指数表記された文字列の数値変換方法について / たかじ (17/11/30(Thu) 16:33) #85904 解決済み
    └ Re[3]: 指数表記された文字列の数値変換方法について / 魔界の仮面弁士 (17/12/01(Fri) 11:13) #85915 解決済み
      └ Re[4]: 指数表記された文字列の数値変換方法について / たかじ (17/12/06(Wed) 10:14) #85967
        ├ Re[5]: 指数表記された文字列の数値変換方法について / 魔界の仮面弁士 (17/12/06(Wed) 13:31) #85971
        └ Re[5]: 指数表記された文字列の数値変換方法について / Hongliang (17/12/06(Wed) 11:59) #85970
          └ 指数表記された文字列の数値変換方法について / 魔界の仮面弁士 (17/12/06(Wed) 14:16) #85972 ←Now
            └ Re[7]: 指数表記された文字列の数値変換方法について / たかじ (17/12/07(Thu) 19:00) #85999 解決済み

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信