处理测量单位

时间:2014-02-16 06:21:51

标签: android

每个国家/地区都使用自己的测量单位,例如美国人在F中测量温度,但加拿大和大多数欧洲国家/地区使用C.相同的测量重量,距离等。 我在我的应用程序中定义了测量单位

<string-array name="measure_units">
    <item>lb</item>
    <item>oz</item>
    <item>cwt</item>
    <item>ft</item>
    <item>yd</item>

对于默认语言环境,然后对于法国我定义类似

的内容
<string-array name="measure_units">
    <item>kg</item>
    <item>ml</item>
    <item>tn</item>
    <item>dm</item>
    <item>m</item>     

到目前为止一直很好,但考虑到大量的重复项,为每个国家定义价值是一项巨大的工作。所以我想介绍2-4个基本测量系统并仅为它们指定值,但是如何为Android实现它? OS中是否嵌入了任何测量系统映射?如果没有这样的功能,你如何处理这个问题?

2 个答案:

答案 0 :(得分:0)

所以这种事情是应用程序本地化的一部分。通常规则是 - 在您的应用程序内部使用一个系统(通常是公制,但任何东西都可以)。仅在显示之前或在输入数据之后立即转换为本地单位,从不将数据存储在除内部格式之外的任何内容中。

您可以找到一个库来为您执行此操作,但它不是内置于Android或Java中。通常情况下,您不会将每种语言映射到长度,温度等。您只需按照建议进行操作 - 构建几个链接的选项,并将Locales映射到一组特定的选项。如果您选择公制作为默认值,则只需要对2个或3个国家/地区进行覆盖 - 几乎每个人都使用指标。

答案 1 :(得分:0)

我有一个建议。

首先将值存储在国际单位中。 (m的距离,kg的重量,C的温度等)。然后使用一些方法将国际单位转换为其他单位。当您需要非国际单位时,请使用这些方法获取转换后的值。您可以使用if语句或开关来相应地获取值。

作为一个例子

if(/*international unit ?*/){
    Log.D("International unit : ", temperature + "C");
}else{
    Log.D("Non - International unit : ", getTemperatureInFahrenheit(temperature) + "F");
}

float getTemperatureInFahrenheit(float celsius){
    return ((celsius * 9 / 5.0) + 32)
}