[英]C# BigInteger remainder as fraction
在閱讀之前,請注意我知道 integer 和浮點除法之間的區別,並且我知道BigInteger.DivRem
和BigInteger.Divide
之間的區別。
考慮以下代碼示例:
BigInteger a = new(5);
BigInteger b = new(2);
BigInteger div = BigInteger.DivRem(a, b, out BigInteger rem);
Console.WriteLine($"{div}.{rem}");
Output = 2.1
BigInteger a = new(5678);
BigInteger b = new(1234);
BigInteger div = BigInteger.DivRem(a, b, out BigInteger rem);
Console.WriteLine($"{div}.{rem}");
Output = 4.742
兩個輸出都不正確(在我所問的情況下) 。 當然,從某種意義上說,它們是正確的,因為它們顯示的是格式為${div}.{rem}
的除法和余數,但就我而言,這不是我想要的。
正確的值分別是2.5
和4.6012965964
(比例為 10 位)。
有沒有辦法將余數轉換/表示為小數值,而不是余數?
注意:我知道有float
、 double
和decimal
,但這些不是我正在尋找的解決方案。
您誤解了-您正在做的是對大整數的 integer 算術,結果是正確的。 閱讀此處Math.DivRem() (將 DIV 和 REM 理解為概念,暫時忘記整數類型)。
您似乎追求的是精度大於double
的浮點類型。 上次我查看.Net 中不存在這樣的類型,除了像QPFloat這樣的一些私人努力
這似乎有效:
BigInteger a = new(5678);
BigInteger b = new(1234);
BigInteger div = BigInteger.DivRem(a, b, out BigInteger rem);
var decimalDigits = new List<BigInteger>();
while (rem != 0 && decimalDigits.Count < 10)
{
rem *= 10;
decimalDigits.Add(BigInteger.DivRem(rem, b, out rem));
}
Console.WriteLine($"{div}.{string.Concat(decimalDigits)}");
這幾乎只是長除法的一種實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.