当前位置: 首页 > 编程语言 > C#

C#学习教程:.NET单位类,英寸转毫米分享

时间:2023-04-11 11:23:30 C#

.NET单位类,英寸转毫米.NET有单位转换类吗?我需要将英寸转换为毫米,反之亦然。没有内置的东西。但您可以简单地乘以或除以25.4。我以前处理过这个问题。我建议为距离设置两个班级。一种是英制单位,另一种是公制单位。然后,您可以轻松地在它们之间来回切换,但明显的警告是,当您这样做时会失去精度。这是英制距离刻度的示例,以英寸为基本测量单位。公共类ImperialDistance{publicstaticreadonlyImperialDistanceInch=newImperialDistance(1.0);publicstaticreadonlyImperialDistanceFoot=newImperialDistance(12.0);publicstaticreadonlyImperialDistanceYard=newImperialDistance(36.0);publicstaticreadonlyImperialDistanceMile=newImperialDistance(63360.0);私人双英寸;公共ImperialDistance(双英寸){_inches=英寸;}publicdoubleToInches(){return_inches;}publicdoubleToFeet(){return_inches/Foot._inches;}publicdoubleToYards(){return_inches/Yard._inches;}publicdoubleToMiles(){return_inches/Mile._inches;}publicMetricDistanceToMetricDistance(){returnnewMetricDistance(_inches*0.0254);}publicoverrideintGetHashCode(){return_inches.GetHashCode();}publicoverrideboolEquals(objectobj){varo=objasImperialDistance;如果(o==null)返回false;返回_inches.Equals(o._inches);}公共静态布尔operator==(ImperialDistancea,ImperialDistanceb){//如果两者都为空,或者两者都是同一个实例,则返回trueif(ReferenceEquals(a,b))returntrue;//如果其中一个为null,则返回falseif(ReferenceEquals(a,null)||ReferenceEquals(b,null))returnfalse;//比较returna._inches==b._inches;}publicstaticbooloperator!=(ImperialDistancea,ImperialDistanceb){return!(a==b);}publicstaticImperialDistanceoperator+(ImperialDistancea,ImperialDistanceb){if(a==null)thrownewArgumentNullException();如果(b==null)抛出新的ArgumentNullException();返回新的ImperialDistance(a._inches+b._inches);}publicstaticImperialDistanceoperator-(ImperialDistancea,ImperialDistanceb){if(a==null)thrownewArgumentNullException();如果(b==null)抛出新的ArgumentNullException();返回新的ImperialDistance(a._inches-b._inches);}publicstaticImperialDistanceoperator*(ImperialDistancea,ImperialDistanceb){if(a==null)thrownewArgumentNullException();如果(b==null)抛出新的ArgumentNullException();返回新的ImperialDistance(a._inches*b._inches);}publicstaticImperialDistanceoperator/(ImperialDistancea,ImperialDistanceb){if(a==null)thrownewArgumentNullException();如果(b==null)抛出新的ArgumentNullException();返回新的ImperialDistance(a._inches/b._inches);}}这是一个以米为基本单位的公共等级:publicclassMetricDistance{publicstaticreadonlyMetricDistanceMilimeter=newMetricDistance(0.001);publicstaticreadonlyMetricDistanceCenimeter=newMetricDistance(0.01);publicstaticreadonlyMetricDistanceDecimeter=newMetricDistance(0.1);publicstaticreadonlyMetricDistanceMeter=newMetricDistance(1.0);publicstaticreadonlyMetricDistanceDecameter=newMetricDistance(10.0);publicstaticreadonlyMetricDistanceHectometer=newMetricDistance(100.0);公共静态只读公制距离公里r=新的MetricDistance(1000.0);私人双_meters;公共MetricDistance(双米){_meters=米;}publicdoubleToMilimeters(){return_meters/Milimeter._meters;}publicdoubleToCentimeters(){return_meters/Centimeter._meters;}publicdoubleToDecimeters(){return_meters/Decimeter._meters;}publicdoubleToMeters(){return_meters;}publicdoubleToDecameters(){return_meters/Decameter._meters;}publicdoubleToHectometers(){return_meters/Hectometer._meters;}publicdoubleToKilometers(){return_meters/Kilometer._meters;}publicImperialDistanceToImperialDistance(){returnnewImperialDistance(_meters*39.3701);}publicoverrideintGetHashCode(){return_meters.GetHashCode();}publicoverrideboolEquals(objectobj){varo=objasMetricDistance;如果(o==null)返回false;返回_meters.Equals(o._meters);}publicstaticbooloperator==(MetricDistancea,MetricDistanceb){//如果两者为null,或两者为同一实例,如果(ReferenceEquals(a,b))返回true,则返回true;//如果其中一个为null,则返回falseif(ReferenceEquals(a,null)||ReferenceEquals(b,null))returnfalse;返回a._meters==b._meters;}publicstaticbooloperator!=(MetricDistancea,MetricDistanceb){return!(a==b);}publicstaticMetricDistanceoperator+(MetricDistancea,MetricDistanceb){if(a==null)thrownewArgumentNullException("a");如果(b==null)抛出新的ArgumentNullException(“b”);返回新的MetricDistance(a._meters+b._meters);}publicstaticMetricDistanceoperator-(MetricDistancea,MetricDistanceb){if(a==null)thrownewArgumentNullException("a");如果(b==null)抛出新的ArgumentNullException(“b”);返回新的MetricDistance(a._meters-b._meters);}publicstaticMetricDistanceoperator*(MetricDistancea,MetricDistanceb){if(a==null)thrownewArgumentNullException("a");如果(b==null)抛出新的ArgumentNullException("b");返回新的MetricDistance(a._meters*b._meters);}publicstaticMetricDistanceoperator/(MetricDistancea,MetricDistanceb){if(a==null)thrownewArgumentNullException("a");如果(b==null)抛出新的ArgumentNullException(“b”);返回新的MetricDistance(a._meters/b._meters);}}这是一个测试方法来说明用法[测试方法]publicvoid_5in_Equals_12_7cm(){varinches=newImperialDistance(5);varcms=newMetricDistance(MetricDistance.Centimeter.ToMeters()*12.7);varcalcCentimeters=Math.Round(inches.ToMetricDistance().ToCentimeters(),2,MidpointRounding.AwayFromZero);varcalcInches=Math.Round(cms.ToImperialDistance().ToInches(),2,MidpointRounding.AwayFromZero);Assert.AreEqual(cms.ToCentimeters(),12.7);Assert.AreEqual(calcCentimeters,12.7);Assert.AreEqual(inches.ToInches(),5);Assert.AreEqual(calcInches,5);}你也可以添加一个扩展方法}[TestMethod]publicvoid_100cm_plus_300cm_equals_400cm(){Assert.AreEqual(100.Centimeters()+300.Cenimeters(),400.Cenimeters());您可以将这个简单的策略用于重量、温度、液体测量等。.NETFramework没有这样的东西,但是F#有UnitofMeasure。不,框架中没有内置单位转换。但是,您自己应该很容易实施。Csuunits是一个不错的C#测量单位库,请参阅https://github.com/cureos/csunits。它目前面向放射治疗,但您可以轻松添加自己的单位和数量。不,你需要自己做一个,像这样:publicclassLength{privateconstdoubleMillimetersPerInch=25.4;私人双_毫米;publicstaticLengthFromMillimeters(doublemm){returnnewLength{_Millimeters=mm};}publicstaticLengthFromInch(doubleinch){returnnewLength{_Millimeters=inch*MillimetersPerInch};}publicdoubleInch{get{return_Millimeters/MillimetersPerInch;}}publicdoubleMillimeters{get{return_Millimeters;解决这个问题。其中之一是https://github.com/angularsen/UnitsNet,它可以处理你想要的。长度距离=Length.FromInch(15);距离.毫米/60;它还支持许多其他东西。以上就是C#学习教程:.NET单位类,英寸转毫米。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢