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

本文关键字:设置 四位 数字 小数点 | 更新日期: 2023-09-27 18:20:51

在我基于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

如果需要进一步的解释或代码,我会很高兴给它,谢谢。

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

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

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

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

以下是我要做的,在我看来这是最简单的方法。(不涉及很多计算等)。将数字转换为字符串(使用ToString( )方法)。然后,将小数点后的第四个字符替换为0/1。然后,将其转换回数字。你可以用同样的方法检查小数点后第四位。。。

为什么不将单元保持在一种类型中?并对修饰符进行转换
我会给你看一个例子,让你知道我的意思:

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;
        }
    }
}

这样,你就不必在转换之间摇摆不定,你试图做的事情也不像你最初建议的那样不透明。