1. ホーム
  2. c#

[解決済み] 文化に関係なく、小数点の桁数を求める。

2022-11-03 10:46:05

質問

異なるカルチャーの情報間で安全に使用できる、小数点の値の小数点以下の桁数を(intとして)引き出す簡潔で正確な方法はあるのでしょうか?

たとえば

19.0は1を返すはずです。

27.5999 は 4 を返すべきです。

19.12は2を返すはずです。

などとなります。

ピリオドで文字列分割して小数点以下を探すクエリを書きました。

int priceDecimalPlaces = price.ToString().Split('.').Count() > 1 
                  ? price.ToString().Split('.').ToList().ElementAt(1).Length 
                  : 0;

しかし、これは小数点の区切り文字として '.' を使用する地域でのみ動作し、したがって異なるシステム間で非常に脆弱であることを思いつきました。

どのように解決するのですか?

私は ジョーの方法 を使って解決しました :)

decimal argument = 123.456m;
int count = BitConverter.GetBytes(decimal.GetBits(argument)[3])[2];