2016-05-17 79 views
0

我正在使用各種百分比值修改XML文件。在一個XML文件中有多個元素。我有一個特定元素的百分比,我需要將剩餘的百分比分配給剩餘的元素。以下是我存儲在服務器中的示例XML文件。在xml標記的多個元素上平均分配百分比

<exam> 
    <name>Maths</name> 
    <percentage>100</percentage> 
</exam> 
<exam> 
    <name>Physics</name> 
    <percentage>70</percentage> 
</exam> 
<exam> 
    <name>Chemistry</name> 
    <percentage>70</percentage> 
</exam> 

我有一個特定主題的百分比值。例如,我有數學的百分比值,我用下面的代碼對數學的百分比值進行了硬編碼。

foreach (XElement xmltag1 in xmltag.Descendants(subsection)) 
{ 
    if (xmltag1.Element("name").Value.Equals("Maths")) 
    { 
     xmltag1.Element("percentage").Value = "75"; 
    } 
} 

現在我需要更新物理和化學的剩餘主體的百分比值,而不是小數。所以我正在使用下面的邏輯。

int totalsections = subclasscount; 
// subclass count is a method which would return the total number of subclasses inside a particular xml tag. I have that method available with me 
int remainingallocatedpercentage = 25/totalsections; 
foreach (XElement xmltag1 in xmltag.Descendants(subsection)) 
{ 
    if ((remainingallocatedpercentage % 1) == 0) 
    { 
     if (!xmltag1.Element("name").Value.Equals("Maths")) 
     {              
      xmltag1.Element("percentage").Value = remainingallocatedpercentage; 
     } 
    } 
    else 
    { 
    }   
} 

我不太清楚如何處理else路徑。所以我需要邏輯來實現它。我想告訴你,我不知道還有什麼其他學科價值可用(就像物理學,化學有多個學科是動態的而不是靜態的),所以我需要在所有科目中平均分配剩餘的百分比。

+0

問題是,你想在else子句中做什麼? – Marco

+0

馬可抱歉,我現在編輯了我的問題,現在您應該能夠弄清楚我確實需要什麼。 – stangada

+0

在else子句中,我想在整個數字中剩下的主題中平均分配百分比。對於數學我有75分配,所以我想分配22物理和化學23。 – stangada

回答

0

首先,這段代碼不會工作,因爲int remainingallocatedpercentage = 25/totalsections;將始終得到一個整數值。相反,你可以這樣做:

var remainingallocatedpercentage = 25/(float)totalsections; 

應用之後,現在你有機會下降到你的代碼的else條件。

然後您的實際問題開始。但必須有一個策略來處理這種情況。在你的else情況下,你可以用下面的方法去:

  1. 的浮點數的最低值只設置到其他類值。這是非常簡單的:

    xmltag1.Element("percentage").Value = remainingallocatedpercentage; 
    
  2. 設置本底值對所有這些除了最後一個,並設置剩餘部分的最後一個。這是一個有點乏味:

    if(!xmltag1.Element("name").Value.Equals(xmltag.Descendants(subsection).LastOrDefault().Element("name").Value)) 
    { 
        xmltag1.Element("percentage").Value = remainingallocatedpercentage; 
    } 
    else 
    { 
        xmltag1.Element("percentage").Value = remainingallocatedpercentage + 1; 
    } 
    

我不知道哪種方法適合你,但因爲你有一個整數約束,沒有比這多少機會。