The previous answer is a little misleading - you can represent any value digitally, as long as you pick a way to represent it.
Is this for synthesis or simulation? In simulation, your code may work as-is, as long as you've defined your signals appropriately, though I couldn't say for sure since I never have any reason to write Verilog of this nature.
In synthesis, you will need to decide on a number representation (e.g. fixed point or floating point) and precision. The easiest solution is then to use the vendor's IP cores to perform multiplications. For example, Xilinx has both fixed point and floating point operator cores. These will not be inferred from code and must be instantiated manually, and may not be purely combinatorial, so you will need to adjust your code and perhaps your design too.