2

我收到类似 PHP 的错误

警告:除以零错误。

我仍然想计算一些问题。如果你能告诉我,如何用例子计算反对数/对数逆,我会更满意。

<?
    if(isset($_POST['submit'])) 
    { 
       $P=$_POST['P'];  // P=100000
       $rate=$_POST['rate']; // rate = 10.5
       $R=($rate/100);
       $N=$_POST['N']; // N = 78
       echo $P ."<br>" ;
       echo $R ."<br>" ;
       echo $N ."<br>" ;
       $NEW=($R/12);   // NEW = .00875
       $aa = (1+($NEW)); // aa = 1.00875
       $ab = bcpow('$aa', '$N',16); // ab = 1.9729529246182467
       $ac = ($ab-1); // ac = 0.9729529246182467
       $ad = bcdiv('$ab', '$ac', 3); // Div by Zero Error 
       $M = ($P*$NEW) *($ad);
       echo "The Installment is : " . $M . "<br>";
    }
?>
4

4 回答 4

5

有问题的行:

$ad = bcdiv('$ab', '$ac', 3); // Div by Zero Error

这里的问题是因为$ab$ac在引号中。他们不应该。

将它们放在引号中意味着 PHP 将$ab其视为由字符 和 组成的字符串$a而不是变量b的数值。$ab

删除引号,它应该开始工作。

这同样适用于bcpow()线路。

于 2013-01-04T11:41:21.223 回答
1

bcpow('$aa', '$N',16);你确定这些变量被解析了吗?它们被视为单引号中的字符串,并且由于没有数字,它们可能只是伪造的。$aa^$n(在计算器上打字会失败)。

您可以使用bcpow("'".$aa."'", "'".$N."'",16);或尝试使用双引号。

于 2013-01-04T10:54:14.860 回答
0

缩小问题的来源: string bcdiv ( string $left_operand , string $right_operand [, int $scale ] )

bcdivDivision by zero仅在正确的操作数为 0 时才会返回,因此您可以通过假设$ac是您的罪魁祸首来回溯。$ac在函数调用之前尝试回显bcdiv以确保它不为空。

我愿意打赌这条线$ac = ($ab-1); // ac = 0.9729529246182467 $ac会变成负数。

你还应该删除你的单引号,不要把手册看得太直。您仍然可以传入 int 或 double ,该函数将为您转换它。即使您将变量转换为双精度值。

//WITHOUT QUOTES
$ab = '1.9729529246182467';
$ac = ($ab-1);
echo bcdiv($ab, $ac, 3);
//output (2.027)

//WITH QUOTES
$ab = '1.9729529246182467';
$ac = ($ab-1);
echo bcdiv($ab, '$ac', 3);
//output Warning (2): bcdiv() [function.bcdiv]: Division by zero
于 2013-01-04T10:54:08.207 回答
0

我也不理解您的代码,但这里是计算 Antilog / log 值的代码

<?php

$log = 11;
$e   = 2.718281828;
$dn  = 1;

// Calculate Antilog of $log = 11
$ans = pow($e, $log);
$antilog = round($ans*10000)/10000;
echo "<br /> Antilog : ".$antilog;

// Calculate Log of $log = 11
$ans = log($log)/$dn;
$log = round($ans*10000)/10000;
echo "<br /> Log : ".$log;

// Calculate Antilog / Log of $log = 11
echo "<br /> Antilog / Log : ".($antilog / $log);
?>

结果:

Antilog : 59874.1416
Log : 2.3979
Antilog / Log : 24969.407231327
Hope this help you, if else please provide more details (comments) on your code.
于 2013-01-04T10:54:41.753 回答