¿Cómo evito que AppleScript use números cortos?

4

Por lo tanto, AppleScript usa por defecto la notación exponencial de los números, por ejemplo, 2.99E + 68. ¿Cómo evito que eso suceda? Quiero que se escriba el número tal como está.

    
pregunta Prokop Hanzl 02.11.2017 - 21:11

2 respuestas

5

Apple proporciona una función de AppleScript convertNumberToString .

Guía de secuencias de comandos de automatización de Mac: Manipulación de números

  

Convertir un número largo en una cadena

     

En AppleScript, los valores numéricos largos se muestran en notación científica. Por ejemplo, 1234000000 se muestra mediante una secuencia de comandos como 1.234E+9 . Cuando este valor se convierte en una cadena, se convierte en: "1.234E+9" . El controlador en el Listado 20-3 convierte un número, independientemente de la longitud, en una cadena de caracteres numéricos en lugar de una cadena numérica en notación científica.

on convertNumberToString(theNumber)
    set theNumberString to theNumber as string
    set theOffset to offset of "E" in theNumberString
    if theOffset = 0 then return theNumberString
    set thePrefix to text 1 thru (theOffset - 1) of theNumberString
    set theConvertedNumberPrefix to ""
    if thePrefix begins with "-" then
        set theConvertedNumberPrefix to "-"
        if thePrefix = "-" then
            set thePrefix to ""
        else
            set thePrefix to text 2 thru -1 of thePrefix
        end if
    end if
    set theDecimalAdjustment to (text (theOffset + 1) thru -1 of theNumberString) as number
    set isNegativeDecimalAdjustment to theDecimalAdjustment is less than 0
    if isNegativeDecimalAdjustment then
        set thePrefix to (reverse of (characters of thePrefix)) as string
        set theDecimalAdjustment to -theDecimalAdjustment
    end if
    set theDecimalOffset to offset of "." in thePrefix
    if theDecimalOffset = 0 then
        set theFirstPart to ""
    else
        set theFirstPart to text 1 thru (theDecimalOffset - 1) of thePrefix
    end if
    set theSecondPart to text (theDecimalOffset + 1) thru -1 of thePrefix
    set theConvertedNumber to theFirstPart
    set theRepeatCount to theDecimalAdjustment
    if (length of theSecondPart) is greater than theRepeatCount then set theRepeatCount to length of theSecondPart
    repeat with a from 1 to theRepeatCount
        try
            set theConvertedNumber to theConvertedNumber & character a of theSecondPart
        on error
            set theConvertedNumber to theConvertedNumber & "0"
        end try
        if a = theDecimalAdjustment and a is not equal to (length of theSecondPart) then set theConvertedNumber to theConvertedNumber & "."
    end repeat     if theConvertedNumber ends with "." then set theConvertedNumber to theConvertedNumber & "0"
    if isNegativeDecimalAdjustment then set theConvertedNumber to (reverse of (characters of theConvertedNumber)) as string
    return theConvertedNumberPrefix & theConvertedNumber
end convertNumberToString
    
respondido por el grg 02.11.2017 - 21:27
2

Puedes forzar el número a una unidad de medida y luego a una cadena como esta:

1.2345E+9 as inches as string

que devolverá "1234500000" .

Puede utilizar cualquier unidad de medida, como kilogramos, centímetros cúbicos, galones, grados Kelvin, etc.

    
respondido por el CJK 03.12.2017 - 00:45

Lea otras preguntas en las etiquetas