簡體   English   中英

C# BigInteger 余數作為分數

[英]C# BigInteger remainder as fraction

在閱讀之前,請注意我知道 integer 和浮點除法之間的區別,並且我知道BigInteger.DivRemBigInteger.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.54.6012965964 (比例為 10 位)。

有沒有辦法將余數轉換/表示為小數值,而不是余數?

注意:我知道有floatdoubledecimal ,但這些不是我正在尋找的解決方案。

您誤解了-您正在做的是對大整數的 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.

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