1

PHP スクリプトに問題があります。20 USD 未満を INR に変換すると正常に動作しますが、19 ($amount) 以上で使用すると、結果の出力の 1 桁目のみが表示されます。このスクリプトを使用して完全な結果出力が必要です。誰かがこの問題を解決するのを手伝ってくれたらうれしいです.

コードは次のとおりです。

function currency($from_Currency,$to_Currency,$amount) {
    $amount = urlencode($amount);
    $from_Currency = urlencode($from_Currency);
    $to_Currency = urlencode($to_Currency);
    $url = "http://www.google.com/ig/calculator?hl=en&q=$amount$from_Currency=?$to_Currency";
    $ch = curl_init();
    $timeout = 0;
    curl_setopt ($ch, CURLOPT_URL, $url);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch,  CURLOPT_USERAGENT , "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)");
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $rawdata = curl_exec($ch);
    curl_close($ch);
    $data = explode('"', $rawdata);
    $data = explode(' ', $data['3']);
    $var = $data['0'];
    return round($var,3);
}

$from_Currency ="USD";
$to_Currency ="INR";
$amount ="20";

echo currency($from_Currency,$to_Currency,$amount);
4

3 に答える 3

2

これを試して

$data = explode('"', $rawdata);
preg_match_all("/([0-9]+(\.[0-9]+)?\s?[kBM]?)/", $data[3], $match1);
$var = implode(",", $match1[0]);
$var = str_replace(",", "", $var);
return round($var, 3);
于 2012-10-31T07:43:40.260 に答える
0

これは、1000 以上の rhs 値の場合、Google が奇妙な数値を返すように見えるためです。応答全体を印刷すると表示されます。返される値は、$18 の場合は 969、$20 の場合は 1á082.30965 などです。そこにある余分な文字を認識できず、ドキュメントもありません。

回避策を使用してください - 1 単位を変換してから、金額を掛けます。

于 2012-10-31T07:34:06.523 に答える
0

私はあなたのコードを修正しました。これは、関数の下に示すように機能します...

function currency($from_Currency,$to_Currency,$amount) {
    $amount = urlencode($amount);
    $from_Currency = urlencode($from_Currency);
    $to_Currency = urlencode($to_Currency);
    $url = "http://www.google.com/ig/calculator?hl=en&q=$amount$from_Currency=?$to_Currency";
    $ch = curl_init();
    $timeout = 0;
    curl_setopt ($ch, CURLOPT_URL, $url);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch,  CURLOPT_USERAGENT , "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)");
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $rawdata = curl_exec($ch);
    curl_close($ch);
    $data = preg_replace("/((\"?[^\"]+\"?)[ ]*:[ ]*([^,\"]+|\"[^\"]*\")(,?))/i", '"\\2": \\3\\4', str_replace(array('{', '}'), array('',''), $rawdata));
    return json_decode( '{' . $data . '}' );
}

$from_Currency ="USD";
$to_Currency ="INR";
$amount ="20";

$amt = currency($from_Currency,$to_Currency,$amount);
//print_r($amt);

// The actual converted amount can be obtained with
$converted_amount = $amt->rhs;
于 2012-10-31T07:30:42.957 に答える