Числа с плавающей запятой, хранящиеся в компьютере, состоят из двух частей: целого и экспоненты, в которых база берется и умножается на целую часть.
Если компьютер работал в базе 10, 0.1
будет 1 x 10⁻¹
, 0.2
будет 2 x 10⁻¹
, а 0.3
будет 3 x 10⁻¹
. Целочисленная математика проста и точна, поэтому добавление 0.1 + 0.2
, очевидно, приведет к 0.3
.
Компьютеры обычно не работают в базе 10, они работают в базе 2. Вы все равно можете получить точные результаты для некоторые значения, например 0.5
, равны 1 x 2⁻¹
, а 0.25
- 1 x 2⁻²
, а их добавление приводит к 3 x 2⁻²
или 0.75
. Точно.
Проблема связана с числами, которые могут быть представлены точно в базе 10, но не в базе 2. Эти цифры должны округляться до их ближайшего эквивалента. Предполагая, что для 64-битного формата с плавающей точкой IEEE используется очень общий формат, ближайшим номером к 0.1
является 3602879701896397 x 2⁻⁵⁵
, а ближайшим номером к 0.2
является 7205759403792794 x 2⁻⁵⁵
; добавление их результатов в 10808639105689191 x 2⁻⁵⁵
или точное десятичное значение 0.3000000000000000444089209850062616169452667236328125
. Номера с плавающей запятой, как правило, округлены для отображения.
В Ruby on Rails вы можете сделать в контроллере:
headers['Access-Control-Allow-Origin'] = '*'
Если вы используете chromer, используйте этот плагин
, если вы находитесь под apache, просто добавьте файл .htaccess в свой каталог с этим контентом:
Header set Access-Control-Allow-Origin: *
Header set Access-Control-Allow-Headers: content-type
Header set Access-Control-Allow-Methods: *
Если вы работаете на chrome, вы можете просто установить расширение chrome из хранилища chrome для решения проблем, связанных с CORS.
Расширение: Allow-Control-Allow-Origin Ссылка: [ https: // chrome .google.com / Webstore / детали / разрешения контроля-позволяют-ориги / nlfbmbojpeacfghkpbjhddihlkkiljbi? гл = еп] [1] [/ д2]
Подстановочный знак не очень безопасный вариант. Вы хотите, чтобы это было более конкретно - проверьте ответ, который я написал здесь по тому же вопросу; как обойти Access-Control-Allow-Origin?
Если вы пишете расширение Chrome и получаете эту ошибку, убедитесь, что вы добавили базовый URL API в свой manifest.json
разрешающий блок , например:
"permissions": [
"https://itunes.apple.com/"
]
Это может быть удобно для всех, кто нуждается в исключении для версий «www» и «non-www» реферера:
$referrer = $_SERVER['HTTP_REFERER'];
$parts = parse_url($referrer);
$domain = $parts['host'];
if($domain == 'google.com')
{
header('Access-Control-Allow-Origin: http://google.com');
}
else if($domain == 'www.google.com')
{
header('Access-Control-Allow-Origin: http://www.google.com');
}
В Ruby Sinatra
response['Access-Control-Allow-Origin'] = '*'
для всех или
response['Access-Control-Allow-Origin'] = 'http://yourdomain.name'
Когда вы получаете запрос, вы можете
var origin = (req.headers.origin || "*");
, чем когда вы должны ответить, переходите к чему-то подобному:
res.writeHead(
206,
{
'Access-Control-Allow-Credentials': true,
'Access-Control-Allow-Origin': origin,
}
);
**Add this meta tag in your Webservice**
header('Content-type: application/json');
header('Access-Control-Allow-Origin: *');
Поскольку Matt Mombrea является правильным для серверной части, вы можете столкнуться с другой проблемой, которая является отказом для whitelisting.
Вы должны настроить свой phonegap.plist. (Я использую старую версию phonegap)
Для кордовы могут быть некоторые изменения в названии и каталоге.
Сначала выберите Поддерживаемые файлы> PhoneGap.plist
[/g1]
, затем в разделе «ExternalHosts»,
Добавьте запись со значением, возможно, « http://nqatalog.negroesquisso.pt « Я использую * только для целей отладки.
[/g2]