先貼代碼
try
{
if(StringGrid1->Cells[6][ARow]!="" && StringGrid1->Cells[5][ARow]!="")
{
Currency GoodsCount , GoodsPrice ;
GoodsCount = RoundTo(StringGrid1->Cells[5][ARow].ToDouble(),-4) ;
GoodsPrice = RoundTo(StringGrid1->Cells[6][ARow].ToDouble(),-4) ;
StringGrid1->Cells[7][ARow] = CurrToStr( GoodsCount * GoodsPrice ) ;
}
}
catch (Exception &exception)
{
;
}
開發環境是C++ build 2007 控制元件是TStringGrid 當第5列和第6列輸入數值比較大的時候(5.6列都是整數型別),第7列計算出現了小數點,即使StringGrid1->Cells[7][ARow] = RoundTo( GoodsCount * GoodsPrice ) 也無效,還是出現小數點,試過各種方法,不知道問題的原因,求大神給提示,給思路
uj5u.com熱心網友回復:
小數點不是一直會出現,偶然出現,概率性事件,很郁悶uj5u.com熱心網友回復:
我猜想不是小數,而是改成了科學計數法,5和6都是整數,把CurrToStr改成IntToStr試試,實在不行就用sprintf吧uj5u.com熱心網友回復:
5.6也是允許小數的uj5u.com熱心網友回復:
那就先得到 值,再加個判斷 大于多少時,就入 IntToStr 否則 用 CurrToStruj5u.com熱心網友回復:
你可以用貨幣這個類Currency,頭檔案是<syscurr.h>。精確到小數值后4位,但它是以64位整數保存的uj5u.com熱心網友回復:
Currency 是精確到小數點4位,但問題是不應該出現小數點就出現了小數點,效果如圖
uj5u.com熱心網友回復:
你要用整數不就沒小數點了嗎?uj5u.com熱心網友回復:
汗,即然全是整數,干麻用double計算
uj5u.com熱心網友回復:
按理Currency不會這樣,浮點數就比較容易出現,其實你那邊看看把這些值都用查看器看看是多少,因為我試過你297*38這個不會出現。uj5u.com熱心網友回復:
這只是一個例子,例子上是全部整數,但是實際情況是這邊也可以填寫小數的
uj5u.com熱心網友回復:
按理Currency不會這樣,浮點數就比較容易出現,其實你那邊看看把這些值都用查看器看看是多少,因為我試過你297*38這個不會出現。
自己的電腦沒有問題,測驗也測驗不出來,而且不是所有使用軟體的都會出問題,部分用戶會出現,而且部分用戶也不是執行也一定出錯
uj5u.com熱心網友回復:
用INT型別uj5u.com熱心網友回復:
二進制小數與十進制小數之間的轉換精度問題,建議設定一個小的閾值,比如0.0001,如果一個數值的小數點后的值小于這個閾值,就轉換成整數再輸出uj5u.com熱心網友回復:
另外一個辦法是在內部把所有的值都用整數表示和處理,比如不是以元為單位,而是以分或者更小的單位來表示和計算,這樣所有的數值就都是整數了,只有在輸出的時候,再轉換成浮點數轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/121002.html
標籤:基礎類
下一篇:RGB轉yuv
