Skip to content

Commit e880a7d

Browse files
committed
Created div()
1 parent 6dd62ef commit e880a7d

File tree

2 files changed

+349
-0
lines changed

2 files changed

+349
-0
lines changed

reference/bc/bcmath/number/div.xml

Lines changed: 348 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,348 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<refentry xml:id="bcmath-number.div" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
3+
<refnamediv>
4+
<refname>BcMath\Number::div</refname>
5+
<refpurpose>Divides by an arbitrary precision number</refpurpose>
6+
</refnamediv>
7+
8+
<refsect1 role="description">
9+
&reftitle.description;
10+
<methodsynopsis role="BcMath\\Number">
11+
<modifier>public</modifier> <type>BcMath\Number</type><methodname>BcMath\Number::div</methodname>
12+
<methodparam><type class="union"><type>BcMath\Number</type><type>string</type><type>int</type></type><parameter>num</parameter></methodparam>
13+
<methodparam choice="opt"><type class="union"><type>int</type><type>null</type></type><parameter>scale</parameter><initializer>&null;</initializer></methodparam>
14+
</methodsynopsis>
15+
<simpara>
16+
Divides this object by <parameter>num</parameter>.
17+
</simpara>
18+
</refsect1>
19+
20+
<refsect1 role="parameters">
21+
&reftitle.parameters;
22+
<variablelist>
23+
<varlistentry>
24+
<term><parameter>num</parameter></term>
25+
<listitem>
26+
<simpara>
27+
The divisor.
28+
</simpara>
29+
</listitem>
30+
</varlistentry>
31+
&bc.number.scale.description;
32+
</variablelist>
33+
</refsect1>
34+
35+
<refsect1 role="returnvalues">
36+
&reftitle.returnvalues;
37+
<simpara>
38+
Returns the result of division as a new <classname>BcMath\Number</classname> object.
39+
</simpara>
40+
<!-- About the operator return value -->
41+
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('bcmath-number.add')/db:refsect1[@role='returnvalues']/db:simpara[2])" />
42+
</refsect1>
43+
44+
<refsect1 role="errors">
45+
&reftitle.errors;
46+
<para>
47+
This method throws a <exceptionname>ValueError</exceptionname> in the following cases:
48+
<simplelist>
49+
<member><parameter>num</parameter> is <type>string</type> and not a well-formed BCMath numeric string</member>
50+
<member><parameter>scale</parameter> is outside the valid range</member>
51+
<member><property>BcMath\Number::scale</property> of the result object is outside the valid range</member>
52+
</simplelist>
53+
</para>
54+
<simpara>
55+
This method throws a <exceptionname>DivisionByZeroError</exceptionname> exception if
56+
<parameter>num</parameter> is <literal>0</literal>.
57+
</simpara>
58+
<para>
59+
When using the operator, throw a <exceptionname>ValueError</exceptionname> in the following cases:
60+
<simplelist>
61+
<member>One of the operands is <type>string</type> and not a well-formed BCMath numeric string</member>
62+
<member><property>BcMath\Number::scale</property> of the result object is outside the valid range</member>
63+
</simplelist>
64+
</para>
65+
<simpara>
66+
When using the operator, throw a <exceptionname>DivisionByZeroError</exceptionname> exception if
67+
divisor is <literal>0</literal>.
68+
</simpara>
69+
</refsect1>
70+
71+
<refsect1 role="bc.autoscale">
72+
<!-- auto scale title -->
73+
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('bcmath-number.add')/db:refsect1[@role='bc.autoscale']/db:title)" />
74+
<simpara>
75+
When the <property>BcMath\Number::scale</property> of the result object is automatically set,
76+
the <property>BcMath\Number::scale</property> of the dividend is used. However, in cases such
77+
as indivisible division, the <property>BcMath\Number::scale</property> of the result is expanded.
78+
Expansion is done only as needed, up to a maximum of +<literal>10</literal>.
79+
</simpara>
80+
<simpara>
81+
That is, if the <property>BcMath\Number::scale</property> of the dividend is <literal>5</literal>,
82+
the <property>BcMath\Number::scale</property> of the result is between <literal>5</literal> and
83+
<literal>15</literal>.
84+
</simpara>
85+
<simpara>
86+
Even in indivisible calculations, the <property>BcMath\Number::scale</property> will not always be
87+
+<literal>10</literal>.
88+
A <literal>0</literal> at the end of the result is considered not to need expansion, so the <property>
89+
BcMath\Number::scale</property> is reduced by that amount.
90+
The <property>BcMath\Number::scale</property> will never be smaller than the <property>BcMath\Number::scale
91+
</property> before expansion.
92+
</simpara>
93+
<example>
94+
<title>Example of <property>BcMath\Number::scale</property> od result object</title>
95+
<programlisting role="php">
96+
<![CDATA[
97+
<?php
98+
var_dump(
99+
new BcMath\Number('0.001')->div('10001'),
100+
new BcMath\Number('0.001')->div('10001', 13),
101+
new BcMath\Number('0.001')->div('100000000000001'),
102+
);
103+
?>
104+
]]>
105+
</programlisting>
106+
&example.outputs;
107+
<screen>
108+
<![CDATA[
109+
object(BcMath\Number)#2 (2) {
110+
["value"]=>
111+
string(13) "0.00000009999"
112+
["scale"]=>
113+
int(11)
114+
}
115+
object(BcMath\Number)#3 (2) {
116+
["value"]=>
117+
string(15) "0.0000000999900"
118+
["scale"]=>
119+
int(13)
120+
}
121+
object(BcMath\Number)#4 (2) {
122+
["value"]=>
123+
string(5) "0.000"
124+
["scale"]=>
125+
int(3)
126+
}
127+
]]>
128+
</screen>
129+
</example>
130+
<!-- Regarding the handling of scale when calculating with string value -->
131+
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('bcmath-number.add')/db:refsect1[@role='bc.autoscale']/db:simpara[3])" />
132+
</refsect1>
133+
134+
<refsect1 role="examples">
135+
&reftitle.examples;
136+
<example>
137+
<title><methodname>BcMath\Number::div</methodname> example when <parameter>scale</parameter> is not specified</title>
138+
<programlisting role="php">
139+
<![CDATA[
140+
<?php
141+
$number = new BcMath\Number('0.002');
142+
143+
$ret1 = $number->div(new BcMath\Number('2.000'));
144+
$ret2 = $number->div('-3');
145+
$ret3 = $number->div(32);
146+
147+
var_dump($number, $ret1, $ret2, $ret3);
148+
?>
149+
]]>
150+
</programlisting>
151+
&example.outputs;
152+
<screen>
153+
<![CDATA[
154+
object(BcMath\Number)#1 (2) {
155+
["value"]=>
156+
string(5) "0.002"
157+
["scale"]=>
158+
int(3)
159+
}
160+
object(BcMath\Number)#3 (2) {
161+
["value"]=>
162+
string(5) "0.001"
163+
["scale"]=>
164+
int(3)
165+
}
166+
object(BcMath\Number)#2 (2) {
167+
["value"]=>
168+
string(16) "-0.0006666666666"
169+
["scale"]=>
170+
int(13)
171+
}
172+
object(BcMath\Number)#4 (2) {
173+
["value"]=>
174+
string(9) "0.0000625"
175+
["scale"]=>
176+
int(7)
177+
}
178+
]]>
179+
</screen>
180+
</example>
181+
182+
<example>
183+
<title><methodname>BcMath\Number::div</methodname> example of explicitly specifying <parameter>scale</parameter></title>
184+
<programlisting role="php">
185+
<![CDATA[
186+
<?php
187+
$number = new BcMath\Number('0.002');
188+
189+
$ret1 = $number->div(new BcMath\Number('2.000'), 15);
190+
$ret2 = $number->div('-3', 5);
191+
$ret3 = $number->div(32, 2);
192+
193+
var_dump($number, $ret1, $ret2, $ret3);
194+
?>
195+
]]>
196+
</programlisting>
197+
&example.outputs;
198+
<screen>
199+
<![CDATA[
200+
object(BcMath\Number)#1 (2) {
201+
["value"]=>
202+
string(5) "0.002"
203+
["scale"]=>
204+
int(3)
205+
}
206+
object(BcMath\Number)#3 (2) {
207+
["value"]=>
208+
string(17) "0.001000000000000"
209+
["scale"]=>
210+
int(15)
211+
}
212+
object(BcMath\Number)#2 (2) {
213+
["value"]=>
214+
string(8) "-0.00066"
215+
["scale"]=>
216+
int(5)
217+
}
218+
object(BcMath\Number)#4 (2) {
219+
["value"]=>
220+
string(4) "0.00"
221+
["scale"]=>
222+
int(2)
223+
}
224+
]]>
225+
</screen>
226+
</example>
227+
</refsect1>
228+
229+
<refsect1 role="bc.operatoroverload">
230+
<!-- operator overload title -->
231+
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('bcmath-number.add')/db:refsect1[@role='bc.operatoroverload']/db:title)" />
232+
<simpara>
233+
<classname>BcMath\Number</classname> can perform division using operators. The calculation with
234+
the operator behaves the same as when the method argument <parameter>scale</parameter> is &null;.
235+
</simpara>
236+
<example>
237+
<title>Example of division using operators</title>
238+
<programlisting role="php">
239+
<![CDATA[
240+
<?php
241+
$number = new BcMath\Number('0.002');
242+
243+
$ret1 = $number / new BcMath\Number('2.000');
244+
$ret2 = $number / '-3';
245+
$ret3 = $number / 32;
246+
247+
var_dump($number, $ret1, $ret2, $ret3);
248+
?>
249+
]]>
250+
</programlisting>
251+
&example.outputs;
252+
<screen>
253+
<![CDATA[
254+
object(BcMath\Number)#1 (2) {
255+
["value"]=>
256+
string(5) "0.002"
257+
["scale"]=>
258+
int(3)
259+
}
260+
object(BcMath\Number)#3 (2) {
261+
["value"]=>
262+
string(5) "0.001"
263+
["scale"]=>
264+
int(3)
265+
}
266+
object(BcMath\Number)#2 (2) {
267+
["value"]=>
268+
string(16) "-0.0006666666666"
269+
["scale"]=>
270+
int(13)
271+
}
272+
object(BcMath\Number)#4 (2) {
273+
["value"]=>
274+
string(9) "0.0000625"
275+
["scale"]=>
276+
int(7)
277+
}
278+
]]>
279+
</screen>
280+
</example>
281+
282+
<example>
283+
<title>Examples of shorthand division using operators</title>
284+
<programlisting role="php">
285+
<![CDATA[
286+
<?php
287+
$number = new BcMath\Number('3');
288+
$num1 = $number;
289+
290+
$num1 /= new BcMath\Number('2');
291+
292+
var_dump($number, $num1);
293+
?>
294+
]]>
295+
</programlisting>
296+
&example.outputs;
297+
<screen>
298+
<![CDATA[
299+
object(BcMath\Number)#1 (2) {
300+
["value"]=>
301+
string(1) "3"
302+
["scale"]=>
303+
int(0)
304+
}
305+
object(BcMath\Number)#3 (2) {
306+
["value"]=>
307+
string(3) "1.5"
308+
["scale"]=>
309+
int(1)
310+
}
311+
]]>
312+
</screen>
313+
</example>
314+
</refsect1>
315+
316+
<refsect1 role="seealso">
317+
&reftitle.seealso;
318+
<simplelist>
319+
<member><function>bcdiv</function></member>
320+
<member><methodname>BcMath\Number::divmod</methodname></member>
321+
<member><methodname>BcMath\Number::mod</methodname></member>
322+
<member><methodname>BcMath\Number::sqrt</methodname></member>
323+
<member><methodname>BcMath\Number::pow</methodname></member>
324+
<member><methodname>BcMath\Number::mul</methodname></member>
325+
</simplelist>
326+
</refsect1>
327+
328+
</refentry>
329+
<!-- Keep this comment at the end of the file
330+
Local variables:
331+
mode: sgml
332+
sgml-omittag:t
333+
sgml-shorttag:t
334+
sgml-minimize-attributes:nil
335+
sgml-always-quote-attributes:t
336+
sgml-indent-step:1
337+
sgml-indent-data:t
338+
indent-tabs-mode:nil
339+
sgml-parent-document:nil
340+
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
341+
sgml-exposed-tags:nil
342+
sgml-local-catalogs:nil
343+
sgml-local-ecat-files:nil
344+
End:
345+
vim600: syn=xml fen fdm=syntax fdl=2 si
346+
vim: et tw=78 syn=sgml
347+
vi: ts=1 sw=1
348+
-->

reference/bc/functions/bcdiv.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ echo bcdiv('105', '6.55957', 3); // 16.007
118118
<member><function>bcdivmod</function></member>
119119
<member><function>bcmod</function></member>
120120
<member><function>bcmul</function></member>
121+
<member><methodname>BcMath\Number::div</methodname></member>
121122
</simplelist>
122123
</para>
123124
</refsect1>

0 commit comments

Comments
 (0)