【问题标题】:Storing decimals in resource folders在资源文件夹中存储小数
【发布时间】:2014-05-21 20:49:34
【问题描述】:

我的代码的一个要求是使用 alpha 值。我想对我的应用程序进行编程,以便在将来的某个时候,我可以轻松地更改此值。

我的理解是,资源是专门为此目的而构建的。 Alpha 需要介于 0 和 1 之间。

我想知道是否有比在整数资源文件夹中将值设置为 1 到 100 之间的整数,然后在代码中除以 100 更优雅的解决方案。

当前代码:

<?xml version="1.0" encoding="utf-8"?>
<resources>    
<!-- choose a value for alpha, it will be divided by 100. 
valid values lie between 0 and 100.-->
<item name = "exponential_filter_alpha" format="">9</item>    
</resources>

我在这里看到了一个类似的问题:https://stackoverflow.com/a/8780360/1014849 但这需要浮点数,不能通过该方法获得双精度数。

【问题讨论】:

  • 你能解释一下为什么你必须使用double而不是float吗?
  • 我的理解是,当双精度足够时您不想使用浮点数,或者在 int 可以工作时使用双精度?只使用浮点数就可以了吗?

标签: java android android-xml android-resources


【解决方案1】:

根据您的评论,我将您的问题理解为性能问题。

在资源中保存和使用 int 而不是 float 在性能上根本不应该引起注意。通过该注释,我认为保存 int 然后一直除以 100 会很愚蠢,因为您也可以保存浮点数。另请注意,当您划分 int 时,无论如何它都会隐式转换为 double

您说您将值用于alpha 值,并且您可能只需要1 到100 的精度,对于这种精度使用浮点数是非常合理的,对于alpha 值也是合理的。

您可能想阅读Float or Double?

【讨论】:

  • 你是对的,这是一个性能问题。谢谢你。该链接很有帮助,我感谢您的意见。我是从最佳实践观点出发的。
【解决方案2】:

有一个整数资源。见这里:Resource Types - More Types。然后你可以在你的Activity中调用getResources().getInteger(R.integer.exponential_filter_alpha)获取整数值,然后按照你的要求除以100。

【讨论】:

  • 谢谢,这是我目前正在使用的,但想知道是否有更优雅的方法。
  • 我不明白你是如何变得更优雅的。它非常简单,您可以将所有值集中在一个位置,而不是在不同区域进行硬编码。您也不需要将所有值保存在不同的文件中。您可以将&lt;integer/&gt;&lt;bool/&gt; 全部放在res/values 文件夹中的公共constants.xml 或config.xml 文件中。如果您好奇,您可以随时了解 Google 如何组织他们的 values folder
  • 是的,我们就资源文件夹路径达成了一致。如果我可以在资源文件夹中存储双打,那将是完美的,不幸的是我不能。我一直在寻找解决这个问题的方法。在资源文件夹中存储浮动结果是最好的(似乎)。非常感谢您的意见,克里斯。
【解决方案3】:

只需使用:

<item name="prim_alpha" format="float" type="dimen">0.87</item>

【讨论】:

    猜你喜欢
    • 2020-11-30
    • 1970-01-01
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 2020-10-30
    • 1970-01-01
    相关资源
    最近更新 更多