7

文字列に変換したときに、おおよその数字 (つまり、Real頭のある数字) の末尾に "." がないことを確認する簡単な方法はありますか? 実際に小数部が表示されている場合は、小数点のみを表示してほしいです。

私が見つけた解決策は堅牢ではなく、 と をぎこちない方法で一緒に使用するかPrecisionAccuracyさらに厄介な方法で使用することに依存しています。NumberFormRealDigits

前もって感謝します。

4

4 に答える 4

5

過去に数値を図で表示するときにこれを使用しました:

Integerise[x_] := If[Round[x] == x, ToString[Round@x] <> ".0", ToString@x]

<> ".0"小数点以下ゼロで整数を表示したくない場合は、単に削除してください。

更新:コメントで dreeves が述べたToStringように、整数の 0.0001 以内の数値を切り捨て、ドットを表示します。

末尾のドットを削除するより良い方法はInputform、ToString の形式を使用することです。

NormalNumber[x_] := ToString[x, InputForm]

テストで:

NormalNumber /@ {5, 5.5, 123.001, 123.0001}

Integerise上記の問題を修正するために、これを上記に組み込むことができます。

于 2009-10-10T06:50:51.560 に答える
3

私はこれをお勧めします:

shownum[x_] := StringReplace[ToString@NumberForm[x, ExponentFunction->(Null&)], 
                             RegularExpression["\\.$"]->""]

末尾の「。」で正規表現の検索と置換を行うだけです。「123」をご希望の場合。「123」ではなく「123.0」として表示するには、最後の空の文字列を「.0」に置き換えます。

更新: Mathematica がデフォルトで科学表記法で表示する数値について、私の元のバージョンは間違って表示されました。NumberFormでそれを修正しました。

これが私が実際に実際に使用しているバージョンです。オプションの丸めが可能です。

(* Show Number. Convert to string w/ no trailing dot. Round to the nearest r. *)
Unprotect[Round];   Round[x_,0] := x;   Protect[Round];
re = RegularExpression;
shn[x_, r_:0] := StringReplace[
  ToString@NumberForm[Round[N@x,r], ExponentFunction->(Null&)], re@"\\.$"->""]
于 2009-10-14T21:56:18.493 に答える
1

文字列を後処理するだけでしょう。最後の文字が「。」であるかどうかを確認する方が高速です(そしてはるかに簡単です)。冗長な演算を行い、すべての精度設定を考慮するよりも。

編集:多分あなたはこれを知っています、しかしあなたはこのようなことをすることができます:

userToString[expr_, form___] := ToString[expr,form];

userToString[expr_Real, form___] := removeTrailingDot[ToString[expr,form]];
于 2009-10-09T20:51:34.893 に答える
1

関数NumberFormScientificFormEngineeringFormなど ... はNumberFormat、数値の仮数、基数、指数をフォーマットして配置するオプションを提供します。と

numberTrim[expr_] := NumberForm[expr,
   NumberFormat -> (Row[{StringTrim[#1, "."], 
        If[#3 == "", "", "\[ThinSpace]\[Times]\[ThinSpace]" <> #2^#3]}] &)];

デフォルトの Mathematica 出力が再現されますが、末尾のドットは削除されます。

于 2016-03-13T22:11:19.330 に答える