<?xml version="1.0" encoding="utf-8"?>
<InstanceReport xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Version>1.0.0.3</Version>
  <hasSegments>false</hasSegments>
  <ReportName>Percentage of Completion Contracts</ReportName>
  <RoundingOption />
  <Columns>
    <Column>
      <LabelColumn>false</LabelColumn>
      <Id>1</Id>
      <Labels>
        <Label Id="1" Label="3 Months Ended" />
        <Label Id="2" Label="Dec. 31, 2009" />
        <Label Id="4" Label="USD / shares" />
      </Labels>
      <CurrencySymbol>$</CurrencySymbol>
      <hasSegments>false</hasSegments>
      <hasScenarios>false</hasScenarios>
      <Segments />
      <Scenarios />
      <Units>
        <Unit>
          <UnitID>USD</UnitID>
          <UnitType>Standard</UnitType>
          <StandardMeasure>
            <MeasureSchema>http://www.xbrl.org/2003/iso4217</MeasureSchema>
            <MeasureValue>USD</MeasureValue>
            <MeasureNamespace>iso4217</MeasureNamespace>
          </StandardMeasure>
          <Scale>0</Scale>
        </Unit>
        <Unit>
          <UnitID>USDEPS</UnitID>
          <UnitType>Divide</UnitType>
          <NumeratorMeasure>
            <MeasureSchema>http://www.xbrl.org/2003/iso4217</MeasureSchema>
            <MeasureValue>USD</MeasureValue>
            <MeasureNamespace>iso4217</MeasureNamespace>
          </NumeratorMeasure>
          <DenominatorMeasure>
            <MeasureSchema>http://www.xbrl.org/2003/instance</MeasureSchema>
            <MeasureValue>shares</MeasureValue>
            <MeasureNamespace>xbrli</MeasureNamespace>
          </DenominatorMeasure>
          <Scale>0</Scale>
        </Unit>
      </Units>
    </Column>
  </Columns>
  <Rows>
    <Row>
      <Id>2</Id>
      <Label>Percentage of Completion Contracts [Abstract]</Label>
      <Level>0</Level>
      <ElementName>jci_PercentageOfCompletionContractsAbstract</ElementName>
      <ElementPrefix>jci</ElementPrefix>
      <IsBaseElement>false</IsBaseElement>
      <BalanceType>na</BalanceType>
      <PeriodType>duration</PeriodType>
      <ElementDataType>string</ElementDataType>
      <ShortDefinition>Percentage of Completion Contracts.</ShortDefinition>
      <IsReportTitle>false</IsReportTitle>
      <IsSegmentTitle>false</IsSegmentTitle>
      <IsSubReportEnd>false</IsSubReportEnd>
      <IsCalendarTitle>false</IsCalendarTitle>
      <IsTuple>false</IsTuple>
      <IsAbstractGroupTitle>true</IsAbstractGroupTitle>
      <IsBeginningBalance>false</IsBeginningBalance>
      <IsEndingBalance>false</IsEndingBalance>
      <IsEPS>false</IsEPS>
      <Cells>
        <Cell>
          <Id>1</Id>
          <ShowCurrencySymbol>false</ShowCurrencySymbol>
          <IsNumeric>false</IsNumeric>
          <NumericAmount>0</NumericAmount>
          <RoundedNumericAmount>0</RoundedNumericAmount>
          <NonNumbericText />
          <NonNumericTextHeader />
          <FootnoteIndexer />
          <hasSegments>false</hasSegments>
          <hasScenarios>false</hasScenarios>
        </Cell>
      </Cells>
      <ElementDefenition>Percentage of Completion Contracts.</ElementDefenition>
      <IsTotalLabel>false</IsTotalLabel>
    </Row>
    <Row>
      <Id>3</Id>
      <Label>Percentage of Completion Contracts</Label>
      <Level>1</Level>
      <ElementName>us-gaap_LongTermContractsOrProgramsDisclosureTextBlock</ElementName>
      <ElementPrefix>us-gaap</ElementPrefix>
      <IsBaseElement>true</IsBaseElement>
      <BalanceType>na</BalanceType>
      <PeriodType>duration</PeriodType>
      <ElementDataType>string</ElementDataType>
      <ShortDefinition>No definition available.</ShortDefinition>
      <IsReportTitle>false</IsReportTitle>
      <IsSegmentTitle>false</IsSegmentTitle>
      <IsSubReportEnd>false</IsSubReportEnd>
      <IsCalendarTitle>false</IsCalendarTitle>
      <IsTuple>false</IsTuple>
      <IsAbstractGroupTitle>false</IsAbstractGroupTitle>
      <IsBeginningBalance>false</IsBeginningBalance>
      <IsEndingBalance>false</IsEndingBalance>
      <IsEPS>false</IsEPS>
      <Cells>
        <Cell>
          <Id>1</Id>
          <ShowCurrencySymbol>false</ShowCurrencySymbol>
          <IsNumeric>false</IsNumeric>
          <NumericAmount>0</NumericAmount>
          <RoundedNumericAmount>0</RoundedNumericAmount>
          <NonNumbericText>&lt;!--DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" --&gt;
   &lt;!-- Begin Block Tagged Note 4 - us-gaap:LongTermContractsOrProgramsDisclosureTextBlock--&gt;
   &lt;div style="font-family: 'Times New Roman',Times,serif"&gt;
   &lt;div style="margin-top: 6pt"&gt;
   &lt;table width="100%" border="0" cellpadding="0" cellspacing="0" style="font-size: 10pt; text-align: left"&gt;
   &lt;tr valign="top" style="font-size: 10pt; color: #000000; background: transparent"&gt;
       &lt;td width="3%" nowrap="nowrap" align="left"&gt;&lt;b&gt;4.&lt;/b&gt;&lt;/td&gt;
       &lt;td width="1%"&gt;&amp;#160;&lt;/td&gt;
       &lt;td&gt;&lt;b&gt;Percentage-of-Completion Contracts&lt;/b&gt;&lt;/td&gt;
   &lt;/tr&gt;
   &lt;/table&gt;
   &lt;/div&gt;
   &lt;div style="margin-top: 6pt"&gt;
   &lt;table width="100%" border="0" cellpadding="0" cellspacing="0" style="font-size: 10pt; text-align: left"&gt;
   &lt;tr valign="top" style="font-size: 10pt; color: #000000; background: transparent"&gt;
       &lt;td width="3%" nowrap="nowrap" align="left"&gt;&amp;#160;&lt;/td&gt;
       &lt;td width="1%"&gt;&amp;#160;&lt;/td&gt;
       &lt;td&gt;The building efficiency business records certain long-term contracts under the
   percentage-of-completion method of accounting. Under this method, sales and gross profit are
   recognized as work is performed based on the relationship between actual costs incurred and
   total estimated costs at completion. The Company records costs and earnings in excess of
   billings on uncompleted contracts within accounts receivable &amp;#8212; net and billings in excess of
   costs and earnings on uncompleted contracts within other current liabilities in the condensed
   consolidated statements of financial position. Amounts included within accounts receivable -
   net related to these contracts were $588&amp;#160;million, $579&amp;#160;million and $613&amp;#160;million at December
   31, 2009, September&amp;#160;30, 2009 and December&amp;#160;31, 2008, respectively. Amounts included within
   other current liabilities were $636&amp;#160;million, $601&amp;#160;million and $625&amp;#160;million at December&amp;#160;31,
   2009, September&amp;#160;30, 2009 and December&amp;#160;31, 2008, respectively.&lt;/td&gt;
   &lt;/tr&gt;
   &lt;/table&gt;
   &lt;/div&gt;
   &lt;/div&gt;
</NonNumbericText>
          <NonNumericTextHeader>&lt;!--DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" --&gt;
   &lt;!-- Begin Block Tagged Note</NonNumericTextHeader>
          <FootnoteIndexer />
          <hasSegments>false</hasSegments>
          <hasScenarios>false</hasScenarios>
        </Cell>
      </Cells>
      <ElementDefenition>No definition available.</ElementDefenition>
      <ElementReferences>No authoritative reference available.</ElementReferences>
      <IsTotalLabel>false</IsTotalLabel>
    </Row>
  </Rows>
  <Footnotes />
  <ComparabilityReport>false</ComparabilityReport>
  <NumberOfCols>1</NumberOfCols>
  <NumberOfRows>2</NumberOfRows>
  <HasScenarios>false</HasScenarios>
  <MonetaryRoundingLevel>UnKnown</MonetaryRoundingLevel>
  <SharesRoundingLevel>UnKnown</SharesRoundingLevel>
  <PerShareRoundingLevel>UnKnown</PerShareRoundingLevel>
  <HasPureData>false</HasPureData>
  <SharesShouldBeRounded>true</SharesShouldBeRounded>
</InstanceReport>
