四个问题 - 计算器应用程序 - Android Java

时间:2011-05-24 04:05:24

标签: java android math variables

嘿所有,我是一个开发Android应用程序的新手,我一直在阅读'Sams Teach Yourself Java 24小时',这是一本很棒的书。但是我被困在了一点,我得到一个十进制数的值只有editTexts并使用java数学来计算我的最终值。

  1. 有没有办法让editText直接输入float或double变量而不是字符串,然后从字符串输入到double?
  2. 在字符串与double或float之间进行转换是否存在任何实际问题,或者值是否保持不变且不会被污染。
  3. 使用doble而不是浮动的差异/利弊。
  4. 从用户输入分数值的最佳方式?
  5. 感谢您的帮助。祝你有个美好的一天。

3 个答案:

答案 0 :(得分:4)

  1. 不,你不能。
  2. 是。如果您的字符串是,例如,ID并且读作“0029482”,则在将其变为整数后,它将显示为“29482”并且可能无效。字符串可以比双精度数或浮点数长,如果字符串中的值为“0.12345678901234567890123456789”,则将其转换为双精度会损失很多精度。
  3. 双打使用两倍的位数(因此名称),因此可以保持更高的精度。
  4. 接受分母和分子整数,并将它们存储在自定义类中。

答案 1 :(得分:2)

  1. 没有。您可以编写自己的子类,使其看起来像是正在发生的事情,但在链中的某个位置,您必须进行从字符/文本数据到数字数据的转换。

  2. 是。原始浮点类型使用IEEE-754来编码二进制的十进制数。编码提供了非常好的精度,但它不精确/不能准确地表示许多可能的数字。因此,如果从字符串解析为原始浮点类型,然后再返回字符串,则可能会得到与输入字符串不同的内容。

  3. double使用两倍的位来将数字编码为float,因此能够保持更高的精度。但是,它不会删除#2中讨论的问题。如果您要删除这些问题,请考虑使用BigDecimal之类的内容来代表您的数字,而不是floatdouble等基本类型。

  4. 将整个内容作为字符串读取,split()将其写在“/”字符上,然后将每个部分存储为整数(或BigInteger)。如果您需要将其显示为小数,请使用BigDecimal执行除法。

答案 2 :(得分:1)

我想补充一点,如果您正在寻找doublefloat的替代品,在字符串和数字形式之间进行转换时不会导致精度损失,请查看以下内容:

  • 标准java.math.BigDecimal类表示任意精度缩放数;即任意精度整数乘以(按比例)固定整数幂10。

  • Apache dfp包中包含基于十进制浮点数的实现。

但是,我现在暂时避开这个主题,并使用floatdouble来实施。 (我认为你的真正的目标是学习如何编写Java,而不是构建世界上最伟大的计算器应用程序。)