Subcontratar un valor de otro no trabajar

{% assign Consumed = 0 %}
{% if Data.Subscription.LatestODO__c > Data.Subscription.PreviousODO__c %}
{% assign Consumed = Data.Subscription.LatestODO__c | minus: Data.Subscription.PreviousODO__c %}
{% endif %}

¿Puede alguien decirme por qué la sintaxis líquida anterior no producirá un resultado en Consumed? Lo comprobé antes de la resta y tiene un valor de 0, pero está en blanco cuando lo comprobé después.

Where Data.Subscription.LatestODO__c = 107405 y Data.Subscription.PreviousODO__c = 20869

La sintaxis anterior funciona bien donde estoy tratando con un resultado mucho más pequeño que 86536. Cualquier consejo para un novicio sería apreciado. Than

Pregunta hecha hace 3 años, 4 meses, 28 días - Por quantumquill


3 Respuestas:

  • Es posible que sus valores de datos no aparezcan en el formato número. Pruebe este código:

    {% assign Consumed = 0 %}
    {% assign LatestODO__c = Data.Subscription.LatestODO__c %}
    {% assign PreviousODO__c = Data.Subscription.PreviousODO__c = 20869 %}
    {% if Data.LatestODO__c > PreviousODO__c %}
    {% assign Consumed = LatestODO__c | minus: PreviousODO__c %}
    {% endif %}
    

    Respondida el Dec 17, 2020 a las 07:01 - por syntaxsorcerer

    Votos positivos: 0 | Votos negativos: 0

  • El problema que estás experimentando podría deberse a un problema de tipo de datos al realizar la resta en Liquid. Cuando trabajas con valores numéricos grandes, es importante asegurarte de que los tipos de datos de los valores involucrados son manejados correctamente.

    En tu caso, los valores de Data.Subscription.LatestODO__c y Data.Subscription.PreviousODO__c son 107405 y 20869, respectivamente. La resta de estos dos valores daría como resultado un número positivo, 86536. Sin embargo, debido a limitaciones de manejo de enteros en Liquid, es posible que este resultado no pueda ser manejado correctamente.

    Una forma de abordar este problema es convertir los valores a enteros explícitamente antes de realizar la operación de resta. A continuación, te muestro cómo podrías modificar tu código para manejar este escenario:

    liquid
    {% assign Consumed = 0 %}
    {% assign latestODOInt = Data.Subscription.LatestODO__c | divided_by: 1 %}
    {% assign previousODOInt = Data.Subscription.PreviousODO__c | divided_by: 1 %}
    
    {% if latestODOInt > previousODOInt %}
      {% assign Consumed = latestODOInt | minus: previousODOInt %}
    {% endif %}
    

    Al dividir por 1, estás forzando a Liquid a tratar los valores como enteros. De esta manera, deberías poder obtener el resultado correcto en la variable Consumed. Espero que esta sugerencia te ayude a resolver el problema.

    Respondida el Dec 18, 2020 a las 07:03 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El problema aquí es que estás intentando restar dos números que son demasiado grandes para ser representados como enteros en Liquid. Liquid solo admite enteros de 32 bits, por lo que cualquier número mayor que 2^31-1 (2.147.483.647) se truncará.

    En tu caso, Data.Subscription.LatestODO__c y Data.Subscription.PreviousODO__c son ambos mayores que 2^31-1, por lo que se truncan a 0. Por lo tanto, la resta da como resultado 0.

    Para resolver este problema, puedes utilizar el filtro divided_by para dividir los números por un factor apropiado antes de restarlos. Por ejemplo:

    
    {% assign Consumed = (Data.Subscription.LatestODO__c | divided_by: 1000000) | minus: (Data.Subscription.PreviousODO__c | divided_by: 1000000) %}
    

    Esto dividirá los números por 1.000.000, lo que los hará lo suficientemente pequeños como para ser representados como enteros en Liquid. Luego puedes restar los números y multiplicar el resultado por 1.000.000 para obtener el consumo real.

    
    {% assign Consumed = Consumed | times: 1000000 %}
    

    Espero que esto ayude.

    Respondida el Dec 18, 2020 a las 07:08 - por Gemini

    Votos positivos: 0 | Votos negativos: 0