Возможно, вас заинтересует SimpleXML , чтобы получить значения из вашей строки / файла / источника xml (как уже упоминалось ранее) и математических функций BC, которые позволяют отправлять большинство ограничения точности.
<?php
$items = new SimpleXMLElement(getXml());
// setting bcmath's default scale to two (digits after the .)
bcscale(2);
foreach( $items as $item ) {
$price = bcadd($item->price, '0.01');
echo $price, " -> ";
if ( -1<bccomp($price, '1.00') && 1>bccomp($price, '1.50') ) {
$price = bcadd($price, '0.50');
echo 'a) price+0.50=', $price, "\n";
}
else if ( 0<bccomp($price, '1.50') && 1>bccomp($price, '2.00') ) {
$price = bcadd($price, '0.50');
echo 'b) price+0.50=', $price, "\n";
}
else {
$price = bcadd($price, '0.10');
echo 'c) price+0.10=', $price, "\n";
}
}
function getXml() {
return '<foo>
<item>
<description>a</description>
<price>1.48</price>
</item>
<item>
<description>b</description>
<price>1.49</price>
</item>
<item>
<description>c</description>
<price>1.50</price>
</item>
<item>
<description>d</description>
<price>1.99</price>
</item>
<item>
<description>e</description>
<price>2.00</price>
</item>
</foo>';
}
отпечатков
1.49 -> a) price+0.50=1.99
1.50 -> a) price+0.50=2.00
1.51 -> b) price+0.50=2.01
2.00 -> b) price+0.50=2.50
2.01 -> c) price+0.10=2.11