PHP str_replace и или number_format не работают - PullRequest
0 голосов
/ 07 октября 2011
      $BRL_PRICE = currency("USD", "BRL", $allmoney);
      echo "BRL1 = " . $BRL_PRICE."<br />";
      $BRL_PRICE = str_replace(" ", "", $BRL_PRICE);
      echo "BRL2 = " . $BRL_PRICE."<br />";  
      $BRL_PRICE = number_format($BRL_PRICE, 2);
      echo "BRL3 = " . $BRL_PRICE."<br />";

выходные данные ..

BRL1 = 1 531.70922
BRL2 = 1 531.70922
BRL3 = 1.00

Все, что я действительно хочу, это округлить значение до ближайшего цента. 10-е место.Я знаю сбои number_format, потому что конвертер валют money () Google добавляет пробел вместо comra или пробела.

Я хочу

BRL3 = 1531.71

.

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 $var;
}

Ответы [ 4 ]

2 голосов
/ 07 октября 2011

Не вините программное обеспечение в тех случаях, когда вам просто лень читать документацию:

$BRL_PRICE = number_format($BRL_PRICE, 2, '.', '');

echo number_format(1531.70922, 2, '.', '');
1 голос
/ 07 октября 2011

Почему бы не использовать sprintf('%.2f',$var)

0 голосов
/ 07 октября 2011

Ответ, который вы получаете от Google, является недействительным json. Вы даже не json_decode это, но только для журнала.

str_replace работает довольно хорошо (как всегда), вам просто нужно заменить правильную строку:

$BRL_PRICE = str_replace("\xc2\xa0", "", $BRL_PRICE);

Это символ Unicode 'NO-BREAK SPACE' (U + 00A0).

0 голосов
/ 07 октября 2011

Я не думаю, что это простое место в вашем номере. Попробуйте preg_replace и посмотрите, что получится:

$BRL_PRICE = preg_replace('/\s+/', '', $BRL_PRICE);
...