5.6.9.3.4 * Operator

The * operator returns the product of its two operands.

 multiplication-operator-expression = expression "*" expression 

Static semantics:

§ A * operator expression has the standard static semantics for binary arithmetic operators (section 5.6.9.3) with the following exceptions when determining the operator’s declared type:

Left Operand Declared Type

Right Operand Declared Type

Operator Declared Type

Currency

Single, Double, String or String * length

Double

Single, Double, String or String * length

Currency

Double

Date

Any numeric type, String, String * length or Date

Double

Any numeric type, String, String * length or Date

Date

Double

 

Runtime semantics:

§ A * operator expression has the standard runtime semantics for binary arithmetic operators (section 5.6.9.3) with the following exceptions when determining the operator’s effective value type:

Left Operand Value Type

Right Operand Value Type

Effective Value Type

Currency

Single, Double or String

Double

Single, Double or String

Currency

Double

Date

Any integral or floating-point numeric type, Currency, String, Date or Empty

Any integral or floating-point numeric type, Currency, String, Date or Empty

Date

 

§ The semantics of the * operator depend on the operator’s effective value type:

Effective Value Type

Runtime Semantics

Byte, Integer, Long, LongLong, Currency or Decimal

The result is the left operand multiplied with the right operand.

Single or Double

The result is the left operand multiplied with the right operand.

 

If this results in multiplying positive or negative infinity by 0, runtime error 6 (Overflow) is raised. In this case, if this expression was within the right-hand side of a Let assignment and both operands have a declared type of Double, the resulting IEEE 754 Double special value (such as positive/negative infinity or NaN) is assigned before raising the runtime error.

Null

The result is the value Null.