簡體   English   中英

雙精度?

[英]Double precision?

我有一種情況,我正在向一個方法發送一個數字,它將該數字分成6並返回一個數字6除以n項目的List。 我正在從dictionary.count中提取分割數,並將返回的列表與我從中提取的字典組合起來。 返回列表,由於某種原因,它並不總是返回正確數量的項目。 它在12階段工作正常。但是如果不可靠的話,它是可預測的。 以下數字返回一個列表,其索引少於所需的索引... 13,15,18,23,25,20,27,28,30 .....下面的代碼是從一個更大的項目中提取的。

public void DivTest()
{
    double value;
    Double.TryParse(textBox1.Text, out value);

    double div = 6 / value;
    int count = 1;

    StringBuilder sb = new StringBuilder();

    for (double d = div; d <= 6; d += div)
    {
        sb.Append(count.ToString()).Append("  :  ")
            .Append(d.ToString("0.0000")).Append("  :  ")                                                                                                                             
            .Append(div.ToString("0.0000")).AppendLine();

        count++;
    }

    label1.Text = sb.ToString();
}

如果您將此代碼添加到具有默認命名文本框,標簽和按鈕的表單,則它可能無法正常使用。 最后一行應該總是6,但它與我提到的數字一致。 我認為這是一個四舍五入的問題,但我不是在這個例子中使用舍入。 有任何想法嗎? 謝謝。

這是一個舍入問題,或者說是數字精度有限的問題。

進行舍入時會進行舍入。 結果無法准確表示,受精度限制。

當結果向上舍入時,添加它們時最終會有一個稍大的數字,例如6.000000000000001而不是6.當它大於6時,它將不會進入循環中的最后一次迭代。

你可以通過使用循環的整數變量來解決這個問題,只需從1循環到value

暫無
暫無

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

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