回答編集履歴
1
修正
test
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
> 入力した数字がこのまま保存されるか、変わってしまうかをPythonで判別することは可能でしょうか。
|
2
2
|
|
3
|
-
PostgreSQLでのreal型は(通常は)単精度の浮動小数点値のようですが、python自体には単精度の型は存在しません。
|
3
|
+
まず、PostgreSQLでのreal型は(通常は)単精度の浮動小数点値のようですが、python自体には単精度の型は存在しません。
|
4
|
+
つまり、いったんPythonのtkinter上に表示~なんらか入力された値は倍精度であるため、原理的に**このまま保存**することはできません。
|
5
|
+
また見た目上同じな「0.999999」であっても、単精度と倍精度では異なる値となります。
|
6
|
+
|
7
|
+
どのようなルールで判別したいのか分かりませんが
|
4
|
-
|
8
|
+
numpy.float32が使えるので、numpyの数値に変換して元の値と==で、あるいはmath.iscloseで
|
9
|
+
あるいは文字列化した結果が同じか?なりで判定すればよいかと思います。
|
5
10
|
```Python
|
6
11
|
import numpy as np
|
7
12
|
import math
|
@@ -10,14 +15,12 @@
|
|
10
15
|
a2 = a1.astype(np.float32)
|
11
16
|
|
12
17
|
for x, y in zip(a1, a2):
|
13
|
-
print(x, y, x==y, math.isclose(x,y), x-y)
|
18
|
+
print(x, y, x==y, math.isclose(x,y), str(x)==str(y), x-y)
|
14
19
|
"""
|
15
|
-
999999.0 999999.0 True True 0.0
|
20
|
+
999999.0 999999.0 True True True 0.0
|
16
|
-
0.999999 0.999999 False False 1.327896115288496e-08
|
21
|
+
0.999999 0.999999 False False True 1.327896115288496e-08
|
17
|
-
9999.9999 10000.0 False False -9.999999929277692e-05
|
22
|
+
9999.9999 10000.0 False False False -9.999999929277692e-05
|
18
|
-
1000000.0 1000000.0 True True 0.0
|
23
|
+
1000000.0 1000000.0 True True True 0.0
|
19
24
|
"""
|
20
25
|
```
|
21
26
|
|
22
|
-
|
23
|
-
|