将数字中的第四个小数位设置为1或0

时间:2013-07-03 20:16:30

标签: c# math numbers decimal

在我的基于Windows的应用程序中,我已经将单位从公制转换为英制并再次返回。这在理论上有效,除非我要做以下

- 设置为英制的默认单位

- 更新号码(现在假设我的号码等于1000)

- 将默认单位设置为指标

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

-set default to imperial

- 更新号码(这是问题)

- 此时我的数字不会更新,因为我的代码不会转换,如果数字已经在这些单位(我可以显示代码,如果你想要,但我的问题不需要),这是必要的我认为克服这个错误的最简单方法是将我的数字中的第四个小数位更改为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

如果需要进一步说明或代码,我很乐意给予它,谢谢。

3 个答案:

答案 0 :(得分:1)

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

要提取特定数字,最直接的方法是多次/除以10^x以将您感兴趣的数字移位到某个地方,转换为int / BigInteger并获得结果% 10

 ((int)(value * 10000) %10 )

答案 1 :(得分:0)

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

答案 2 :(得分: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;
        }
    }
}

通过这种方式,您无需在转换之间进行yoyo,而您尝试做的事情也不会像您最初建议的那样不透明。