2009年11月17日 星期二

C# 的 Decimal 小數點很麻煩...

最近在算成績時發現,float 真的是不能拿來算成績,不只是不適合算錢,連滿分只有100分的成績也不能算,會算出一堆誤差,花了一堆時間查了半天終於發現有個叫「decimal」型態,有效位數非常大,專用在財務方面的資料型態,decimal 捨入計算誤差非常非常少,後來就全面使用 decimal 來算成績,可是又發現計算結果總是有「.00」出現,就算計算結果是整數,還是有那個00...要拿掉非常麻煩...,又搞了半天,終於發現終極解法,就是運算、儲存時全部用 decimal ,但是要輸出到報表就全部轉型成 float、double,雖然還是有點麻煩,不過算是較簡單的解法了。float、double 不適合運算,但是運算結果輸出去到是很適合,因為成績的圍範就滿分100,最多小數到2位,跟本不會超出 float 的圍範...吧....

我的目得只是要計算結果不能有誤差,但是結果的尾數是0的要去掉...就這樣..

2009年11月9日 星期一

Postgresql Changing a Column's Data Type

Changing a Column's Data Type

To convert a column to a different data type, use a command like:

ALTER TABLE products ALTER COLUMN price TYPE numeric(10,2);

This will succeed only if each existing entry in the column can be converted to the new type by an implicit cast. If a more complex conversion is needed, you can add a USING clause that specifies how to compute the new values from the old.

PostgreSQL will attempt to convert the column's default value (if any) to the new type, as well as any constraints that involve the column. But these conversions might fail, or might produce surprising results. It's often best to drop any constraints on the column before altering its type, and then add back suitably modified constraints afterwards.