Портативный способ получить эпсилон в C++
#include <limits>
std::numeric_limits<double>::epsilon()
Тогда, функция сравнения становится
#include <cmath>
#include <limits>
bool AreSame(double a, double b) {
return std::fabs(a - b) < std::numeric_limits<double>::epsilon();
}
РЕДАКТИРОВАТЬ
Подумайте о том, чтобы записать необходимые локализованные ресурсы в объект JavaScript (хэш), а затем использовать его для поиска ваших динамически создаваемых объектов. Я думаю, это лучше, чем возвращаться к серверу за переводом. Это похоже на добавление через viewdata, но может быть немного более гибким. FWIW, я мог бы рассматривать ресурсы локализации как часть представления, а не как часть контроллера.
В представлении:
<script type="text/javascript"
src='<%= Url.Content( "~/Resources/Load?translate=Close,Open" %>'></script>
который выводил бы что-то вроде:
var local = {};
local.Close = "Close";
local.Open = "Open";
Без аргументов он выводил бы весь хэш перевода. Использование аргументов дает вам возможность настраивать его для каждого представления.
Затем вы можете использовать его в своих файлах JavaScript, например:
$(function(){
$('#button').click( function() {
$("<img src=... title='" + local.Close + "' />")
.appendTo("#someDiv")
.click( function() { ... } );
});
});
На самом деле, я не слишком беспокоюсь о том, чтобы мой код JavaScript не попадал в мои представления, пока Код JavaScript локализован в контейнере. Обычно я Я установлю свою главную страницу с 4 областями содержимого: заголовок, заголовок, основная и скрипты. Заголовок, заголовок и основная часть располагаются там, где вы ожидаете, а область сценариев находится в нижней части тела.
Я помещаю все мои JavaScript-файлы, включая любые элементы для viewusercontrols, в контейнер сценариев. Код JavaScript, специфичный для представлений, идет после include. При необходимости я реорганизую общий код обратно в сценарии. Я подумал об использовании метода контроллера для сопоставления сценариев, включающих, то есть, включение нескольких сценариев с использованием одного запроса, но еще не дошел до этого.
Это дает преимущество в том, что код JavaScript хранится отдельно для удобочитаемость, но также позволяет мне легко вводить модель или просматривать данные в код JavaScript по мере необходимости.
и main идут туда, где вы ожидаете, а область сценариев находится в нижней части тела.Я помещаю все свои JavaScript, включая любые элементы для viewusercontrols, в контейнер сценариев. Код JavaScript, специфичный для представлений, идет после include. При необходимости я реорганизую общий код обратно в сценарии. Я подумал об использовании метода контроллера для сопоставления сценариев, включающих, то есть, включение нескольких сценариев с использованием одного запроса, но еще не дошел до этого.
Это дает преимущество в том, что код JavaScript хранится отдельно для удобочитаемость, но также позволяет мне легко вводить модель или просматривать данные в код JavaScript по мере необходимости.
и main идут туда, где вы ожидаете, а область сценариев находится в нижней части тела.Я помещаю все свои JavaScript, включая любые элементы для viewusercontrols, в контейнер сценариев. Код JavaScript, специфичный для представлений, идет после include. При необходимости я реорганизую общий код обратно в сценарии. Я подумал об использовании метода контроллера для сопоставления сценариев, включающих, то есть, включение нескольких сценариев с использованием одного запроса, но еще не дошел до этого.
Это дает преимущество в том, что код JavaScript хранится отдельно для удобочитаемость, но также позволяет мне легко вводить модель или просматривать данные в код JavaScript по мере необходимости.
Код JavaScript, специфичный для представлений, идет после include. При необходимости я реорганизую общий код обратно в сценарии. Я подумал об использовании метода контроллера для сопоставления сценариев, включающих, то есть, включение нескольких сценариев с использованием одного запроса, но еще не дошел до этого.Это дает преимущество в том, что код JavaScript хранится отдельно для удобочитаемость, но также позволяет мне легко вводить модель или просматривать данные в код JavaScript по мере необходимости.
Код JavaScript, специфичный для представлений, идет после include. При необходимости я реорганизую общий код обратно в сценарии. Я подумал об использовании метода контроллера для сопоставления сценариев, включающих, то есть, включение нескольких сценариев с использованием одного запроса, но еще не дошел до этого.Это дает преимущество в том, что код JavaScript хранится отдельно для удобочитаемость, но также позволяет мне легко вводить модель или просматривать данные в код JavaScript по мере необходимости.
Если вы настаиваете на сохранении его отдельно, вы можете сделать что-то вроде:
//keep all of your localised vars somewhere
var title = '{title_from_server}';
document.getElementById('someImage').title = title;
Помните, что если вы используете код JavaScript для инициализации любого текста элементов, ваш сайт ужасно ухудшится там, где нет JavaScript. т в наличии.
На самом деле ASP.NET Ajax имеет встроенный механизм локализации: Общие сведения о локализации ASP.NET AJAX