سؤال

أقوم بإجراء قسمة في JSP وأرغب في تقريب النتيجة - كيف أفعل ذلك؟

أي.

<c:set
  var="expiry"
  value="${(expire.time - now.time) / (60 * 1000)}"/>

...كيف يمكنني تقريب النتيجة؟

شكرًا،

هل كانت مفيدة؟

المحلول

وكبديل:

<fmt:formatNumber var="expiry"
  value="${(expire.time - now.time) / (60 * 1000)}"
  maxFractionDigits="0" />

وهذه الطريقة لا تفقد التعريب (الفواصل والنقاط).

نصائح أخرى

وكنت:

${fn:substringBefore(expiry, '.')}

والذي باقتطاع بدلا من التقريب، ولكن هذا قد يكون جيدا بما فيه الكفاية.

قد يبدو مثل:

<c:set var="expire" value="100"/>
<c:set var="now" value="3"/>

<c:choose>
 <c:when test="${(expire mod now)!=0}">
  <c:set var="res" value="${(expire - (expire mod now))/now}"/>
  ${res}
 </c:when>
 <c:otherwise>
  <c:set var="res" value="${expire/now}"/>
  ${res}
 </c:otherwise>
</c:choose>

ملحوظة:أعتقد أنه يجب عليك استخدام عصري على أية حال أو % وظيفة jstl، أستخدم mod في المثال.من فضلك، اختبر متغيرات "انتهاء الصلاحية" و"الآن" بقيم مختلفة، يجب أن تعمل بشكل جيد.

وماذا عن هذا الإختراق القذرة:

<c:set
  var="expiry"
  value="${(((expire.time - now.time) / (60 * 1000) * 100) - 0.5) / 100.0}"/>

ولكن أود أن تفعل ذلك في الفول و فقط تظهر النتيجة هنا. بجانب هذا، يمكنك تحديد وظائف في TLD الخاص أو، إذا كان ذلك غير معتمد في البيئة الخاصة بك الحصول على وظائف في لغة التعبير من خلال تنفيذ خريطة و(أ ب) استخدامها. يمكنك تنفيذ طريقة الحصول على (كائن) لتفعل ما تريد والذي يطلق عليه مثل هذا:

<c:set
  var="expiry"
  value="${Helpers.round[(expire.time - now.time) / (60 * 1000)]"/>

ملحوظة، المساعدون يوفر "getRound ()" الطريقة التي ترجع تنفيذ خريطة الخاص بك.

ومع الإصدار الحالي EL يمكنك استخدام

<c:set var="expiry"
value="${Math.round( (expire.time - now.time) / (60 * 1000) )}"/>

أو

<c:set var="expiry"
value="${Math.floor( (expire.time - now.time) / (60 * 1000) )}"/>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top