1

そのため、Ruby On Rails を使用して時間追跡アプリケーションを作成し、時間を表す数値として時間を保存しています。

0.01 (36 秒) 時間を超えるものは無関係なので、小数点以下 2 桁だけが必要です。

列の型としてフロートを持つ MySQL データベースを使用しています。これはほとんどの場合機能しますが、浮動小数点数の計算と丸めでエラーが発生することがあります。

オプションについて調査したところ、多くの人が BigDecimal の使用を推奨していることがわかりました。計算を使用して多くのカスタム データベース クエリを使用しているため、列の種類を変更するとこれにどのような影響があるかを知りたいと思いました。これは文字列または yaml として保存されますか、それとも MySQL でネイティブにサポートされていますか?

または、Ruby/Rails で固定小数点 10 進演算を行う同等の方法があります。

どの方法でも多くのリファクタリングが必要になると思いますが、これを最も回避するにはどうすればよいですか?

どんな洞察も高く評価されます。

4

3 に答える 3

3

時間を表す数値として時間を格納する代わりに、36 秒 (または場合によっては個々の秒) の増分を表す数値として格納します。

固定小数点を実行するために 10 進数をサポートする型は必要ありません。単にビジネス ロジックを分割して時間を取得します。

于 2011-06-14T15:36:05.237 に答える
2

MySQL には組み込みの BigDecimal サポートがあります。 http://dev.mysql.com/doc/refman/5.1/en/precision-math-decimal-changes.html

それを使用することをお勧めします。私の Rails アプリケーションでは問題なく動作します。アプリケーションの代わりにデータベースがそれを処理できるようにすると、作業が楽になります。抽象化を設計どおりに使用できます。

移行コードは次のとおりです。

change_column :table_name, :column_name, :decimal

参考: Rails移行でカラム変更

于 2011-06-14T15:48:21.777 に答える
1

実際にタイム トラッキング アプリ ( http://www.yanomo.com ) を作成し、MySQL を基になる dbms として表す時間数としてすべての時間を保存します。列の型には DECIMAL(precision,scale) を使用します。あなたの場合、 DECIMAL(5,2) のようなことができます。ビジネスロジック (JAVA) では、BigDecimal を使用します。

于 2011-06-14T16:00:43.413 に答える