-1

在我基于 Windows 的应用程序中,我进行了从公制到英制的单位转换,然后再转换回来。这在理论上可行,除非我要执行以下操作

- 将默认单位设置为英制

-更新数字(现在假设我的数字等于 1000 英寸)

- 将默认单位设置为公制

-更新数字(现在假设我的数字等于 25400 毫米)

- 将默认设置回英制

-更新数字(这是问题所在)

--此时我的数字不会更新,因为如果数字已经在这些单位中,我的代码不会转换(如果你愿意,我可以显示代码,但我的问题不需要它)这是需要的,所以我想克服此错误的最简单方法是将数字中的小数点后四位更改为 0(公制)或 1(英制),但我不能只说

number += 0.0001 or number -= 0.0001

因为在转换过程中我可以得到一个像 3452.823591384023840583 这样的数字,但我会使用这个数字并且只显示前三位小数3452.823,所以对于这个例子,我想取我的数字并更改第四位小数(因为它无论如何都没有显示)并将其更改为 0 或 1。所以这就是我想要的...

取一个数字,让我们使用 1.234567 并更改第四个小数位(5)并将其更改为 0 或 1 我想要的任何一个,让我们现在使用 0。所以现在我将有一个数字是 1.234067。一旦我有了这个新数字,我希望能够检查 if 语句中的第四个小数位,看看它是 0 还是 1 等等

if(number.getFourthDemialPlace() == 1) DO STUFF

如果需要进一步的解释或代码,我很乐意提供,谢谢。

4

3 回答 3

1

您可能应该使用格式来处理您的实际问题......

要提取特定数字,最直接的方法是乘以/除以将10^x您感兴趣的数字移到一个位置,转换为int/ BigInteger,然后得到结果% 10

 ((int)(value * 10000) %10 )
于 2013-07-03T20:23:43.870 回答
0

你为什么不把单位保持在一种类型?并在修饰符上进行转换,
我将向您展示一个示例,让您知道我的意思:

public enum UnitType
{
    Feet = 0 ,Meters = 1
}

public Length
{
    public Length(decimal lenInMeters)
    {
        _lenInMeters = lenInMeters;
    }

    private decimal _lenInMeters;
    private decimal ConvertToMeters(decimal feet)
    {
        //do conversion
    }

    private decimal ConvertToFeet(decimal meter)
    {
        //do conversion
    }

    private void ChangeByFeet(decimal feetChange)
    {
        _lenInMeters + ConvertToMeters(feetChange);
    }

    public void Change(decimal amount, UnitType units)
    {
           switch(units)
           {
              case(UnitType.Meters):
                  _lenInMeters+=amount;
                  return;
              case(UnitType.Feet):
                  _lenInMeters+=ConvertToMeters(amount);
                  return;
              case(default):
                  throw new ApplicationException("not supported type");
           }
    }

    public decimal InFeet
    {
        get
        {
            return ConvertToFeet(_lenInMeters);
        }
    }

    public decimal InMeters
    {
        get
        {
            return _lenInMeters;
        }
    }
}

这样,您就不必在转换之间悠悠悠悠地进行,而且您尝试做的事情并不像您最初建议的那样不透明。

于 2013-07-03T20:35:09.937 回答
0

这就是我要做的,这是我认为最简单的方法。(不处理大量计算等)。将数字转换为字符串(使用ToString( )方法)。然后,将小数点后的第四个字符替换为 0/1。然后,将其转换回数字。您可以通过执行相同的操作来检查小数点后四位...

于 2013-07-03T20:25:19.200 回答