数学结果不准确的PHP

时间:2013-07-08 19:39:59

标签: php mysql math

在PHP中使用数学是否有任何规则。当我尝试做一些简单的数学运算时,我得到了一些数字。

这是特定的脚本

            $profit = $quote_1 - $entry;

以下是完整脚本的片段

 if ($productCount > 0) {
        // get all the product details
        while($row = mysql_fetch_array($sql)){ 
            $id = $row["id"];
            $symbol = $row["symbol"];
            $sym = strtoupper($sym);
            $entry = $row["entry"];     
            $exit = $row["exit"];   
            $openclosed = $row["openclosed"];       
            $entrydate = $row["entrydate"];
            $profit = $quote_1 - $entry;
            $color = "#000000";
            $positive = "";
            if ($profit >= 0){
                                $color = "#00a900";
                                $positive = "+";
                             } 
            else if ($profit < 0){
                                $color = "#ef3600";
                                $positive = "";}
            if(empty($symbol)) {
                                echo nothing;
                               }
                else {
                    $open = fopen("http://quote.yahoo.com/d/quotes.csv?s=$symbol&f=sl1d1t1c1ohgv&e=.csv", "r");
                    $quote = fread($open, 1000);

                    fclose($open);

                    $quote = str_replace("\"", "", $quote);
                    $quote = explode(",", $quote);

                    $quote_0 = ($quote[0]);
                    $quote_1 = ((float)$quote[1]);
                    $quote_2 = ($quote[2]);
                    $quote_3 = ($quote[3]);
                    $quote_4 = ((float)$quote[4]);
                    $quote_5 = ((float)$quote[5]);
                    $quote_6 = ((float)$quote[6]);
                    $quote_7 = ((float)$quote[7]);
                    $quote_8 = ((float)$quote[8]);

                    echo "<ul><li><div class='wrapPicks'>
                  <div class='symbolPicks'>
                  <div class='quoteTitle'>$quote_0</div>
                  </div>
                  <div class='bgPicks'>
                  <div class='quote'>Entry Price: $$entry</div>
                  <div class='quote'>Last trade: $$quote_1</div>
                    <!--<div class='quote'>Date: $quote_2</div>-->
                    <div class='quote'>Open P/L: <div class='bigGreen'><span style=\"color: $color\">$positive $$profit </span></div></div>
                   <!-- <div class='quote'>Change From Previous Close: $$quote_4</div>-->
                    <!--<div class='quote'>High: $$quote_6</div>
                    <div class='quote'>Low: $$quote_7</div>
                   <div class='quote'>Volume: $quote_8</div>-->
                   </div>
                    </div></li></ul>";
            }

现在我想到的是,雅虎数据可能会以字符串的形式出现,这可能会让人失望。我还不清楚我的MYSQL表是必须是int还是VARChAR可以接受?

1 个答案:

答案 0 :(得分:1)

在第

$open = fopen("http://quote.yahoo.com/d/quotes.csv?s=$symbol&f=sl1d1t1c1ohgv&e=.csv", "r");

您需要替换实际符号,而不是在查询中将其保留为字符串。也许是这样的:

$open = fopen("http://quote.yahoo.com/d/quotes.csv?s=".$symbol."&f=sl1d1t1c1ohgv&e=.csv", "r");

连接符号会有所帮助。

如果您的请求无效,您可能正在查看垃圾。

此外 - 您需要在使用它进行任何数学运算之前提出此请求 - 换句话说,您必须在使用该值计算利润之前计算quote_1

这是我所谈论的一个可笑的简化版本。看看你是否理解为什么这与你所做的不同,以及如何“从这里回到那里”:

<?php
    $symbol = "GE";
    $entry = 23;
    $open = fopen("http://quote.yahoo.com/d/quotes.csv?s=".$symbol."&f=sl1d1t1c1ohgv&e=.csv", "r");
    $quote = fread($open, 1000);
    fclose($open);
    $quote = str_replace("\"", "", $quote);
    $quote = explode(",", $quote);
    $lastPrice = (float)$quote[1];
    $profit = $lastPrice - $entry;
    echo "current ".$symbol." quote: ".$lastPrice;
    echo "; entry: ".$entry."; profit: ".$profit;
?>

您可以在http://www.floris.us/SO/stocks.php看到这一点。我没有试图让它变得漂亮 - 只是让数学正确。现在输出是

current GE quote: 23.32; entry: 23; profit: 0.32

我希望它有用。