Эта функция преобразует любое число, меньшее чем 3999999, в римский. Обратите внимание, что числа, превышающие 3999, будут внутри метки с text-decoration
, установленными на overline
, это добавит overline
, которое является правильным представлением для x1000, когда число больше 3999.
Четыре миллиона (4 000 000) будут IV с двумя overline
s, поэтому вам нужно будет использовать какой-то трюк, чтобы представить это, возможно, DIV
с border-top
, или некоторое фоновое изображение с этими двумя overline
s .. Каждый overline
представляет x1000.
function convert(num){
num = parseInt(num);
if (num > 3999999) { alert('Number is too big!'); return false; }
if (num < 1) { alert('Number is too small!'); return false; }
var result = '',
ref = ['M','CM','D','CD','C','XC','L','XL','X','IX','V','IV','I'],
xis = [1000,900,500,400,100,90,50,40,10,9,5,4,1];
if (num <= 3999999 && num >= 4000) {
num += ''; // need to convert to string for .substring()
result = '<label style="text-decoration: overline;">'+convert(num.substring(0,num.length-3))+'</label>';
num = num.substring(num.length-3);
}
for (x = 0; x < ref.length; x++){
while(num >= xis[x]){
result += ref[x];
num -= xis[x];
}
}
return result;
}
Сработало правило S2885:
Необезопасные поля не должны быть статическими
blockquote>
squid: S2885 [ 117]
Не все классы в стандартной библиотеке Java были написаны, чтобы быть потокобезопасными. Использование их многопоточным способом с большой вероятностью может вызвать проблемы с данными или исключения во время выполнения. Это правило создает проблему, когда экземпляр Calendar, DateFormat, javax.xml.xpath.XPath или javax.xml.validation.SchemaFactory помечен как статический.Так как
SimpleDateFormat
не является потокобезопасным, он не очень хорошо работает с другими потоками. Возможно, вы ошиблись форматированием дат.Если вы используете Java 8 или выше, вы должны использовать
DateTimeFormatter
, как в этот ответ . В противном случае использование Joda Time имеет смысл, согласно этому ответу .
В качестве примечания, наличие класса с именем
Constants
end позволяет ему содержать все виды статических конечных переменных, которые редко используются. Обычно вы должны поместить каждую константу туда, где она принадлежит.
Статические переменные в основном используются для констант.
Здесь вы объявили static и присвоили ему экземпляр SimpleDateFormat
.
Либо сделайте DATE_TIME_FORMAT
нестатичным, либо присвойте этой переменной постоянную.
Лучше поменяйте его на переменную экземпляра и используйте Sting для этого.
например, public final String DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss:SSS";
Используйте joda-time или просто замените переменную методом:
public static final DateFormat getDateTimeFormat() {
return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss:SSS");
}