問題タブ [decimal]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
12434 参照

python - python小数比較

python小数比較

2.0 が正しく変換されることを期待していましたが、PEP 327を読んだ後、float を Decimal に暗黙的に変換しない何らかの理由があることを理解しましたが、この場合のように TypeError を発生させるべきではありません。

他のすべての演算子もそうです / - % // など

だから私の質問は

  1. これは正しい行動ですか?(cmpで例外を発生させないでください)
  2. 独自のクラスを派生させ、基本的に Decimal(repr(float_value)) の float コンバーターを正しく使用する場合、注意事項はありますか? 私のユースケースには、価格の比較のみが含まれます

システムの詳細: Ubuntu 8.04.1 上の Python 2.5.2

0 投票する
2 に答える
6057 参照

php - PHP/MySQL: ベスト マネー オペレーション/ストア プラクティス?

そこで、お金をたくさん扱うアプリケーション(PHP/MySQL)を作ろうと考えており、PHPのfloatデータ型やMySQLの10進数を参考にしながら、お金をどうやって貯めて運用していくかを考えています。

2つの選択肢を考えていました。そのうちの 1 つは、浮動小数点数の不正確さを処理せず、DB にも整数として格納するために、通貨を整数セント形式 ($dollars * 100) で操作および格納することです。もう 1 つは、DB に 10 進数として格納し、計算に PHP で BC Math を使用することです。

そのため、どのオプションを使用するのが最適かを一晩中グーグル検索しましたが、明確な答えは見つかりませんでした。私が見た唯一の合理的なオプションは、整数のセント 1 でした (これは、ブラウザーに表示するたびに DB に保存する前に、ドルからセントに、またはその逆に多くの変換を行うことを意味するため、あまり好きではありません)。

また、MySQL の 10 進数 (MySQL は 10 進数を文字列として格納し、浮動小数点数として操作するなど) について不満を言う人もいますが、それは古い投稿でした。MySQL のドキュメントによると、現在のバージョンは小数を正しく処理しますが、唯一の不満は、宣言された小数部の長さを超える値の小数部を切り捨てることでした (たとえば、decimal(9,2) と宣言された列に 12.326 の値を格納する場合)。 、しかし、私の調査では、単に切り捨てるのではなく丸めます (12.326 は 12.33 になります)。これは私の意見では正しいです。

また、お金を小数として格納し、PHP BCMath を使用して計算を行うことに関する推奨事項は見つかりませんでした。これは、BC および GMP 数学関数について知っている人がほとんどいないためだと思います。

では、精度、速度 (BCMath の計算速度、MySQL の 10 進速度と整数)、およびプログラミングの快適さを考慮して、どのオプションを使用するのが最適でしょうか?

0 投票する
15 に答える
64000 参照

c++ - C / C ++は小数点以下の数を数えますか?

ユーザーからの入力が10進数であるとしましょう。5. 2155(小数点以下4桁)。自由に保存できます(int、double)など。

数値の小数点以下の桁数を調べるための賢い(または非常に簡単な)方法はありますか?(最後のビットをマスクすることによって、数値が偶数または奇数であることをどのように見つけるかという質問のようなものです)。

0 投票する
4 に答える
24162 参照

c# - intを小数として箱から出せないのはなぜですか?

IDataRecord reader次のように小数を取得していることがあります。

何らかの理由で、これは「指定されたキャストが無効です」という無効なキャスト例外をスローします。

私がそうするときreader[0].GetType()、それはそれがInt32であることを私に告げます。私の知る限り、これは問題ではないはずです。

私はこれをこのスニペットでテストしましたが、これは問題なく機能します。

これにより、リーダーに含まれるintを小数としてアンボックス化できないのはなぜかと頭を悩ませました。

なぜこれが起こっているのか誰かが知っていますか?私が見逃している微妙なものはありますか?

0 投票する
8 に答える
256371 参照

python - Python で 10 進数を使用して文字列を整数に変換する

Python で「nn.nnnnn」という形式の文字列があり、それを整数に変換したいと考えています。

直接変換が失敗する:

次を使用して小数に変換できます。

'.' で分割して、0 から 10 進数を引き、それを整数に足すこともできます。

しかし、不必要な型変換や操作を行わずに、int として使用することをお勧めします。

0 投票する
3 に答える
992 参照

c# - dotNet 10 進数型はバイナリ比較エラーに対して脆弱ですか?

数か月ごとに遭遇するエラーの 1 つに、次のようなものがあります。

「x が y に等しい」と表示するコードを想定するかもしれませんが、そうではありません。
簡単な説明は、小数点以下の桁数が 2 進数として表されるため、double に収まらないということです。

例: 2.625 は次のようになります。

10.101

なぜなら

また、一部の値 (19.08 と 2.01 の結果など) は double のビットで表現できません。

1 つの解決策は、定数を使用することです。

最初の例で double の代わりに decimal を使用すると、結果は "x equals y" になります。
しかし、これが「10進数」タイプがこの動作の脆弱性ではないためか、値が128ビットに「適合」するため、この場合は機能するかを自問しています。

誰かが定数を使用するよりも良い解決策を持っているのではないでしょうか?

ところで。これは dotNet/C# の問題ではなく、ほとんどのプログラミング言語で発生すると思います。

0 投票する
3 に答える
16789 参照

python - Pythonで分数の循環小数セクションを取得する方法はありますか?

Pythonのdecimalモジュールを使用して分数を処理していますが、特定の分数の繰り返し部分だけを取得したいと思います。例:1/3の場合は3を取得したいのですが、1/7の場合は142857を取得したいのです。これを行うための標準機能はありますか?

0 投票する
7 に答える
64285 参照

.net - 小数精度の調整、.net

C# のこれらの行

次の出力が生成されます。

したがって、リテラルから 10 進変数を作成すると、精度を制御できることがわかります。

  • リテラルを使用せずに 10 進変数の精度を調整できますか?
  • a から b を作成するにはどうすればよいですか? c から b を作成するにはどうすればよいですか?
0 投票する
3 に答える
3223 参照

.net - .net を丸めずに 10 進数の書式設定

昨日、小数とその内部精度に関する一般的な質問をしました。これは、私が対処しようとしているシナリオに関する特定の質問です。

入力されたSqlServerに列があります-decimal(18,6)。これらの値を取得すると、作成される .net 10 進数がデータベースの精度と一致します。それらは次のようになります。

これらの値を次のルールに従って提示 (ToString) する必要があります。

  • ゼロ以外は常に表示されます。
  • 小数点以下第 n 位までの後続ゼロが表示されます。
  • 小数点以下第 n 位以降のゼロは表示されません。

だから、これは私が n が 3 のときに欲しいものです:

ここで、ToString が小数であるというコードをいくつか書きました。末尾のゼロをすべて削除し、文字列を分析して小数点を探し、小数点以下の桁数を数えて、末尾のゼロを何個戻す必要があるかを確認します。 これを達成するためのより良い方法はありますか?

また、上記の質問で ToString と言ったことは知っていますが、データ アクセス レイヤーから出る途中で小数を変更できれば、消費者は常に適切な精度で小数を取得できます。文字列を操作せずに、10 進数自体でこの操作を実行することは可能ですか?

0 投票する
9 に答える
12207 参照

c++ - C / C ++は、特定の精度で小数を効率的に切り上げます

私は以下を最適化しようとしています。以下のコードはこれを行います:

a = 0.775 で精度 2 dp が必要な場合、a => 0.78

基本的に、最後の桁が 5 の場合は次の桁を切り上げますが、そうでない場合は切り上げません。

私の問題は、値が 0.44999999343.... として保存され、setprecision が 0.4 に丸められるため、0.45 が小数点 1 で 0.5 に丸められないことでした。

そのため、setprecision をより高くする必要がsetprecision(p+10)あり、実際に 5 で終わる場合は、正しく切り上げるために少量を追加します。

完了すると、a と文字列 b を比較し、結果を返します。問題は、この関数が数十億回呼び出され、プログラムがクロールすることです。これを書き換え/最適化する方法と、コード内のどの機能がマシンに非常に重いかについて、より良いアイデアはありますか?