簡體   English   中英

在 C# 中使用 System.Decimal 的數學運算

[英]Math operations using System.Decimal in C#

需要能夠對十進制數使用標准數學函數。 准確性非常重要 double不是可接受的替代品。 C#中的十進制數如何實現數學運算?

編輯我正在使用System.Decimal 我的問題是System.Math不適用於System.Decimal 例如,以下函數不適用於System.Decimal

  • System.Math.Pow
  • System.Math.Log
  • System.Math.Sqrt

好吧, Double使用浮點數學,這不是你所追求的,除非你正在為 3D 圖形或其他東西做三角函數。

如果你需要做簡單的數學運算,比如除法,你應該使用System.Decimal

來自 MSDN:

更新:經過一番討論,問題是您想使用小數,但 System.Math 僅將 Doubles 用於幾個關鍵功能。 遺憾的是,您使用的是高精度數字,並且由於 Decimal 是 128 位,而 Double 僅為 64,因此轉換會導致精度損失。

顯然有一些可能的計划讓大部分 System.Math 處理小數,但我們還沒有。

我搜索了一下數學庫並編譯了這個列表:

  1. Mathdotnet ,一個用 C#/.Net 編寫的數學開源(MIT/X11、LGPL 和 GPL)庫,旨在為符號代數和數值/科學計算提供一個自包含的干凈框架。

  2. .NET 的極限優化數學庫(付費)

  3. DecimalMath一個相對較新的人,這個廣告自稱: Microsoft 忘記的對 Decimal 的便攜式數學支持等等。 聽起來很有希望。

DecimalMath包含System.Math class 中的所有函數,帶有decimal參數類比

注意:這是我的庫,其中還包含一些示例

你沒有給我們足夠的信息來回答這個問題。

十進制和雙精度都是不准確的。 對於適當的x和n選擇,當表示的數量完全等於形式(x/10 n )的一部分時,小數的表示誤差為零 當數量再次等於x和n的合適選擇的形式(x/2 n )的一小部分時,雙打的表示誤差為零。

如果您正在處理的數量不是該表格的一部分,那么您將得到一些表示錯誤,句號。 特別是,您提到取平方根。 許多平方根是無理數; 它們沒有分數形式,因此任何使用分數的表示格式都會產生小錯誤。

你能更詳細地解釋你在做什么嗎?

使用具有 128 位精度的十進制數據類型:

http://msdn.microsoft.com/en-us/library/364x0z75(v=vs.80).aspx

暫無
暫無

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

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