[解決済み] 科学的記数法を用いない2倍から文字列への変換
質問
.NET Frameworkでdoubleを科学的記数法のない浮動小数点文字列表現に変換する方法は?
"Small"サンプル(有効数字は任意の大きさでよい、例えば
1.5E200
または
1e-200
) :
3248971234698200000000000000000000000000000000
0.00000000000000000000000000000000000023897356978234562
どの 標準的な数値フォーマット はこのようなものであり カスタムフォーマット では、小数点以下の桁数を自由に設定することはできないようです。
とは重複しません。 10の累乗表現なしでdoubleを文字列に変換する方法(E-05) というのは、そこで示された答えが ではなく は手元の問題を解決していません。この問題で受け入れられた解決策は、固定小数点(20桁など)を使用することでしたが、これは私が望むものではありません。固定幅の最大幅は99文字なので、固定ポイントのフォーマットと冗長な0をトリミングしても、問題は解決しません。
注意してください。 は、独自の数値フォーマット (たとえば、カルチャー情報に依存する他の小数点セパレータ) を正しく処理する必要があります。
編集してください。 質問は本当に前述の数値の変位についてのみです。私は浮動小数点数がどのように動作し、どのような数値が使用され、計算されるかを知っています。
どのように解決するのですか?
汎用的¹な解決策としては、339の場所を保存する必要があります。
doubleValue.ToString("0." + new string('#', 339))
ゼロでない小数点以下の桁数は最大16桁です。15は小数点の右側にあります。指数はこの15桁を最大324桁右側に移動させることができます。( 範囲と精度を参照してください。 )
に対して動作します。
double.Epsilon
,
double.MinValue
,
double.MaxValue
と、その中間に位置するものです。
すべてのフォーマットと文字列の作業は、管理されていないCLRコードによって1つのパスで行われるため、パフォーマンスは正規表現/文字列操作のソリューションよりもはるかに大きくなります。また、コードが正しいことを証明するのもはるかに簡単です。
使いやすさとさらに良いパフォーマンスのために、それを定数にします。
public static class FormatStrings
{
public const string DoubleFixedPoint = "0.###################################################################################################################################################################################################################################################################################################################################################";
}
¹
更新しました。
私は誤って、これもロスレスソリューションであると言いました。実際はそうではありません。
ToString
を除くすべてのフォーマットに対して通常の表示丸めを行うからです。
r
.
ライブの例です。
ありがとう、@Loathing! ご覧ください
Lothing さんの回答
をご覧ください。固定小数点表記でラウンドトリップする機能が必要な場合(つまり
.ToString("r")
を使用している場合など)。
関連
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] 文字列をfloatやintにパースするにはどうしたらいいですか?
-
[解決済み] C#で文字列のエンコーディングを手動で指定せずに、一貫性のあるバイト表現を得るには?
-
[解決済み] .NETでのdecimal, float, doubleの違い?
-
[解決済み] Microsoft Officeをインストールせずに、C#でExcel(.XLSおよび.XLSX)ファイルを作成するにはどうすればよいですか?
-
[解決済み] 文字列が数値(float)であるかどうかを確認するにはどうすればよいですか?
-
[解決済み] JavaScriptで浮動小数点数の精度を扱うには?
-
[解決済み] Pythonで浮動小数点数を固定幅にフォーマットする方法
-
[解決済み】大文字・小文字を区別しない「Contains(string)
-
[解決済み】なぜ10進数は2進数で正確に表現できないのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Solved] 1つ以上のエンティティで検証に失敗しました。詳細は'EntityValidationErrors'プロパティを参照してください [重複]。
-
[解決済み】プログラム実行中に1秒待つ
-
[解決済み】Excel "外部テーブルが期待された形式ではありません。"
-
[解決済み】C#はJavaのcharAt()と同等?)
-
[解決済み】非静的メソッドはターゲットを必要とする
-
[解決済み】WPFでXamlファイルにコメントを追加する方法は?
-
[解決済み】Visual Studio: 操作を完了できませんでした。パラメータが正しくありません
-
[解決済み] ...基礎となる接続は閉じられました。予期しないエラーが受信で発生しました
-
[解決済み】URLから画像をダウンロードする方法
-
[解決済み】WebResource.axdとは何ですか?