【问题标题】:Four questions - Calculator Application - Android Java四个问题 - 计算器应用 - Android Java
【发布时间】:2011-05-24 04:05:24
【问题描述】:

大家好,我是一个开发 Android 应用程序的新手,我一直在阅读“Sams 在 24 小时内自学 Java”,这是一本很棒的书。但是我一直坚持下去,我只得到一个十进制数的值 editTexts 并使用 java 数学来计算我的最终值。

  1. 有没有办法让 editText 直接输入到 float 或 double 变量,而不是输入到字符串,然后再从字符串输入到 double?
  2. 在字符串与双精度或浮点数之间转换是否存在任何实际问题,或者值是否保持不变且不会被污染。
  3. 使用 doble 与 float 的区别/优缺点。
  4. 从用户那里输入小数值的最佳方式?

感谢您的帮助。祝你有美好的一天。

【问题讨论】:

    标签: java android math variables


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

    【讨论】:

      【解决方案2】:
      1. 没有。您可以编写自己的子类,让它看起来就像正在发生的事情,但在链中的某个地方,您必须将字符/文本数据转换为数字数据。

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

      3. double 使用两倍的位数将数字编码为浮点数,因此能够保持更高的精度。但是,它不会消除#2 中讨论的问题。如果您想消除这些问题,请考虑使用类似 BigDecimal 的东西来表示您的数字,而不是像 floatdouble 这样的原始类型。

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

      【讨论】:

        【解决方案3】:

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

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-05-04
          • 2010-10-03
          • 2021-11-10
          • 1970-01-01
          • 2020-12-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多