簡體   English   中英

如何在c#中安全地從雙精度轉換為小數

[英]How to safely convert from a double to a decimal in c#

我們使用十進制數據類型將財務數據存儲在SQL Server數據庫中,我們需要6-8位精度的十進制數。 當我們通過數據訪問層將這個值返回到我們的C#服務器時,它將作為十進制數據類型返回。

由於一些我無法控制的設計約束,需要對其進行轉換。 轉換為字符串不是問題。 轉換為double是因為MS文檔說“[從十進制轉換為雙倍]會產生舍入錯誤,因為雙精度浮點數的有效位數小於小數位數。”

作為雙重(或字符串),我們可以在完成任何計算后舍入到2位小數,那么進行十進制轉換的“正確”方法是什么,以確保在舍入之前我們不會丟失任何精度?

轉換不會在前8位數內產生錯誤。 double有15-16位數的精度 - 小於28-29的decimal ,但足以滿足你的目的。

你肯定應該采取某種計划來避免將來使用double ,但是 - 這是一個不合適的財務計算數據類型。

如果你舍入到2dp,IMO“正確”的方式將存儲一個整數倍 - 即12.34你存儲整數1234.不再有雙舍入的禍患。

如果你必須使用雙,這仍然有效; 所有整數都保證完全存儲為double - 所以仍然使用相同的技巧。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM