निम्नलिखित कोड में, गुणात्मक दृष्टिकोण क्यों गोलियों की त्रुटियों का उत्पादन नहीं कर रहा है, जबकि संचयी जोड़ दृष्टिकोण है?मुझे दो अनुमानित समान अंकगणितीय परिचालनों से अलग परिणाम क्यों मिलता है?
function get_value() { return 26.82; }
function a($quantity) {
$value_excluding_vat = get_value();
$value_including_vat = round($value_excluding_vat * (1 + (20/100)),2);
$total_nett = 0;
$total_gross = 0;
for($i=0; $i<$quantity; $i++) {
$total_nett += $value_excluding_vat;
$total_gross += $value_including_vat;
}
return array(
$total_nett,
$total_gross
);
}
function b($quantity) {
$value_excluding_vat = get_value();
$value_including_vat = round($value_excluding_vat * (1 + (20/100)),2);
return array(
$quantity * $value_excluding_vat,
$quantity * $value_including_vat
);
}
$totals = a(1000);
print_r($totals);
echo $totals[1] - $totals[0];
echo "\n\n";
$totals = b(1000);
print_r($totals);
echo $totals[1] - $totals[0];
यहाँ मेरी उत्पादन है:
Array
(
[0] => 26820
[1] => 32180
)
5360.0000000005
Array
(
[0] => 26820
[1] => 32180
)
5360
http के संभावित डुप्लिकेट: // stackoverflow। कॉम/प्रश्न/11366522/php-floating-point-error-with-basic-maths – BLaZuRE
मैंने आपके प्रश्न को इस प्रकार पढ़ा है: _ "मेरे पास कोड ए (दिखाया नहीं गया था), जो फ़्लोटिंग पॉइंट नंबरों को गुणा करने और गोल करने पर परिणाम एक्स लौटा। मैंने इसे कोड बी (न तो दिखाया गया) में बदल दिया जो परिणाम उत्पन्न करता है वाई। ऐसा क्यों होता है? "_। जवाब है: यह आपके कोड पर निर्भर करता है, और शायद गोल करने वाली त्रुटियों के साथ करना है। कृपया अपना वास्तविक, प्रासंगिक कोड दिखाएं और आपने जो कोशिश की है। – CodeCaster
[round()] (http://php.net/manual/en/function.round.php) के लिए $ मोड तर्क का उपयोग करने पर विचार करें: डिफ़ॉल्ट है PHP_ROUND_HALF_UP –