Wie verhindere ich, dass AppleScript Kurznummern verwendet?

Daher verwendet AppleScript standardmäßig die Exponentialschreibweise von Zahlen – zum Beispiel 2,99E+68. Wie kann ich das verhindern? Ich möchte, dass die Nummer so geschrieben wird, wie sie ist.

Antworten (2)

Eine AppleScript-Funktion convertNumberToStringwird von Apple bereitgestellt.

Mac Automation Scripting Guide: Manipulieren von Zahlen

Konvertieren einer langen Zahl in einen String

In AppleScript werden lange numerische Werte in wissenschaftlicher Schreibweise angezeigt. Beispielsweise 1234000000wird von einem Skript als angezeigt 1.234E+9. Wenn dieser Wert in eine Zeichenfolge umgewandelt wird, wird er zu: "1.234E+9". Der Handler in Listing 20.3 wandelt eine Zahl unabhängig von ihrer Länge in eine Zeichenfolge aus numerischen Zeichen statt in eine numerische Zeichenfolge in wissenschaftlicher Notation um.

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
Nur um sicherzugehen, funktioniert das auch, wenn ich danach als Nummer damit arbeiten muss?
@Prokop Wenn Sie damit als Zahl arbeiten möchten, behalten Sie es einfach als ursprüngliche Zahl bei und arbeiten Sie damit, bis Sie es als Zeichenfolge ausgeben möchten.
Gut, danke. könntest du dir auch meine andere unbeantwortete Frage ansehen?

Sie können die Zahl wie folgt in eine Maßeinheit und dann in eine Zeichenfolge umwandeln:

1.2345E+9 as inches as string

die zurückkehren wird "1234500000".

Sie können beliebige Maßeinheiten wie Kilogramm, Kubikzentimeter, Gallonen, Grad Kelvin usw. verwenden.