public double askDouble(String title, String message) throws CancelledException {

		String key = join(title, message);
		Double existingValue = loadAskValue(this::parseDouble, key);
		if (isRunningHeadless()) {
			return existingValue;
		}

		Double choice = doAsk(Double.class, title, message, existingValue, lastValue -> {

			AskDialog<Double> dialog = new AskDialog<>(title, message, AskDialog.DOUBLE, lastValue);
			if (dialog.isCanceled()) {
				throw new CancelledException();
			}

			return dialog.getValueAsDouble();
		});

		if (choice == null) {
			return 0D; // prevent autoboxing NullPointerException
		}

		return choice;
	}
Returns a double, using the String parameters for guidance. The actual behavior of the
method depends on your environment, which can be GUI or headless.
<p>
Regardless of environment -- if script arguments have been set, this method will use the
next argument in the array and advance the array index so the next call to an ask method
will get the next argument.  If there are no script arguments and a .properties file
sharing the same base name as the Ghidra Script exists (i.e., Script1.properties for
Script1.java), then this method will then look there for the String value to return.
The method will look in the .properties file by searching for a property name that is a
space-separated concatenation of the input String parameters (title + " " + message).
If that property name exists and its value represents a valid double value, then the
.properties value will be used in the following way:
<ol>
		<li>In the GUI environment, this method displays a popup dialog that prompts the user
			for a double value. If the same popup has been run before in the same session, the
			double input field will be pre-populated with the last-used double. If not, the
			double input field will be pre-populated with the .properties value (if it exists).
		</li>
		<li>In the headless environment, this method returns a double value representing the
			.properties value (if it exists), or throws an Exception if there is an	invalid or
			missing .properties value.</li>
</ol>
<p>
Note that in both headless and GUI modes, you may specify "PI" or "E" and get the
corresponding floating point value to 15 decimal places.

@param title the title of the dialog (in GUI mode) or the first part of the variable name
			(in headless mode or when using .properties file)
@param message the message to display next to the input field (in GUI mode) or the second
			part of the variable name (in headless mode or when using .properties file)
@return the user-specified double value
@throws CancelledException if the user hit the 'cancel' button in GUI mode
@throws IllegalArgumentException if in headless mode, there was a missing or	invalid double
			specified in the .properties file
Ghidra/Features/Base/src/main/java/ghidra/app/script/GhidraScript.java