Edit on GitHub

uio.utility.strings.conversion

 1from typing import Optional
 2
 3
 4def floatToStringForADQLcastVarchar(
 5    floatValue: float,
 6    dropLeadingZero: bool = False
 7) -> str:
 8    """
 9    Convert float value to string for using in ADQL queries. For instance,
10    the float value is `1.2345`, and we know that database rounds the values,
11    so we need to drop the last digit and use `%` instead of it, so in ADQL
12    query it will be something like:
13
14    ``` sql
15    -- ...
16    WHERE CAST(some_float AS VARCHAR(10)) LIKE '1.234%'"
17    ```
18
19    Example:
20
21    ``` py
22    from uio.utility.strings import conversion
23    from uio.utility.databases import tap
24
25    dropsLeadingZeroOnCastToVarchar = tap.services.get(
26        "nasa", {}
27    ).get(
28        "drops-leading-zero-on-cast-to-varchar", False
29    )
30    val = conversion.floatToStringForADQLcastVarchar(
31        1.2345,
32        dropsLeadingZeroOnCastToVarchar
33    )
34    print(val)
35    ```
36    """
37    stringValue: str = ""
38
39    # NASA's ADQL casts `0.123` float value as `.123` string
40    if dropLeadingZero and abs(floatValue) < 1:
41        if floatValue < 0:  # just in case, preserve the `-` sign
42            stringValue = f"-{str(floatValue)[2:-1]}%"
43        else:
44            stringValue = f"{str(floatValue)[1:-1]}%"
45    else:
46        stringValue = f"{str(floatValue)[:-1]}%"
47
48    return stringValue
def floatToStringForADQLcastVarchar(floatValue: float, dropLeadingZero: bool = False) -> str:
 5def floatToStringForADQLcastVarchar(
 6    floatValue: float,
 7    dropLeadingZero: bool = False
 8) -> str:
 9    """
10    Convert float value to string for using in ADQL queries. For instance,
11    the float value is `1.2345`, and we know that database rounds the values,
12    so we need to drop the last digit and use `%` instead of it, so in ADQL
13    query it will be something like:
14
15    ``` sql
16    -- ...
17    WHERE CAST(some_float AS VARCHAR(10)) LIKE '1.234%'"
18    ```
19
20    Example:
21
22    ``` py
23    from uio.utility.strings import conversion
24    from uio.utility.databases import tap
25
26    dropsLeadingZeroOnCastToVarchar = tap.services.get(
27        "nasa", {}
28    ).get(
29        "drops-leading-zero-on-cast-to-varchar", False
30    )
31    val = conversion.floatToStringForADQLcastVarchar(
32        1.2345,
33        dropsLeadingZeroOnCastToVarchar
34    )
35    print(val)
36    ```
37    """
38    stringValue: str = ""
39
40    # NASA's ADQL casts `0.123` float value as `.123` string
41    if dropLeadingZero and abs(floatValue) < 1:
42        if floatValue < 0:  # just in case, preserve the `-` sign
43            stringValue = f"-{str(floatValue)[2:-1]}%"
44        else:
45            stringValue = f"{str(floatValue)[1:-1]}%"
46    else:
47        stringValue = f"{str(floatValue)[:-1]}%"
48
49    return stringValue

Convert float value to string for using in ADQL queries. For instance, the float value is 1.2345, and we know that database rounds the values, so we need to drop the last digit and use % instead of it, so in ADQL query it will be something like:

-- ...
WHERE CAST(some_float AS VARCHAR(10)) LIKE '1.234%'"

Example:

from uio.utility.strings import conversion
from uio.utility.databases import tap

dropsLeadingZeroOnCastToVarchar = tap.services.get(
    "nasa", {}
).get(
    "drops-leading-zero-on-cast-to-varchar", False
)
val = conversion.floatToStringForADQLcastVarchar(
    1.2345,
    dropsLeadingZeroOnCastToVarchar
)
print(val)