【发布时间】:2019-01-01 07:58:14
【问题描述】:
我有一个输入,它是 String。输入将始终是十进制数的String 表示,例如以下示例之一:
3.14159265
314159265
314159265e5
我定义了一个名为Types 的enum,它有两个成员:Types.FLOAT 和Types.DOUBLE。
我想编写一个函数,该函数将为所有可以表示为float不失去准确性的输入返回Types.FLOAT,并为所有其他可以表示为的输入返回Types.DOUBLE double 不失准确性。如果double 的数字太准确,则应返回null 之类的内容。
众所周知,float 的大小为 32 位,而double 的大小为 64 位。
将double 转换为float 会导致准确性下降,例如:
3.14159265 --> 3.141592
314159265 --> 314159200
314159265e5 --> 314159200e5
需要澄清的一些事情:
- 我实际上并不想将我的输入解析为其中一种类型。 我只需要这些信息,以便将其传递给 Hive。
- 不使用最小准确度数据类型是不可接受的。
【问题讨论】:
-
抱歉说得太清楚了,我的最后一个问题被不知道
float和double区别的人扼杀了。 -
你能检查
Float.parseFloat(str);,如果不能解析,检查Double.parseDouble(str);吗? -
@notyou
parseFloat无论如何都会解析,但会失去很多准确性。 -
我认为最好的方法是使用
Float和Double解析它,然后再次使用一些任意精度库并比较结果。自己处理浮点解析可能会变得丑陋。 -
那么试试类似:stackoverflow.com/questions/26099818/…。仅供参考,它是输,而不是输。
标签: java floating-point inferred-type