Make a Scientific Notation Property Group.
As a workaround could set up a property group to handle scientific notation. Restricted to the significant digits of the float property, but allows to set the the power.
Here I've used a generic python property with getter and setter. can do same with bpy.props.
properties and expose to the UI.
import bpy
from bpy.props import FloatProperty, IntProperty, PointerProperty
from bpy.types import PropertyGroup
from math import pow, log10, floor
class ScientificNotation(PropertyGroup):
def set_num(self, value):
self.power = floor(log10(abs(value)))
self.number = value / pow(10, self.power)
def get_num(self):
return self.number * pow(10, self.power)
number : FloatProperty(min=-10, max=10)
power : IntProperty()
value = property(get_num, set_num)
bpy.utils.register_class(ScientificNotation)
bpy.types.Scene.foo = PointerProperty(type=ScientificNotation)
Layout with both number and power to set. Use the value property in calculation. Could use a string property for the number, to get more sig digits.

Example of use in python console.
>>> C.scene.foo.number = 6.62607004
>>> C.scene.foo.power = -34
>>> C.scene.foo.value
6.626070022583007e-34
>>> C.scene.foo.value = -344233.44e-44
>>> C.scene.foo.value
-3.442334413528442e-39
>>> C.scene.foo.number
-3.4423344135284424
>>> C.scene.foo.power
-39
Can add pythonic methods as well, eg repr
or str
class ScientificNotation(PropertyGroup):
def __repr__(self):
return f"{self.value :6e}"
to
>>> C.scene.foo
3.442334e-39
See also https://blender.stackexchange.com/a/134310/15543
precision
argument to6
(max) is the only thing you can do... $\endgroup$