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

使用归一化科学记数法绘制字符串(上标)分享

时间:2023-04-10 23:22:50 C#

使用归一化科学记数法绘制字符串(上标)我想在我的游戏中绘制以下字符串,以供比较,宇宙中有10^75个粒子。其中1075以标准化科学记数法格式化(就像我们在学校所做的那样)。我使用SpriteBatch.DrawString方法,但找不到解决方案。一些琐碎的事情:我一直在查看UTF表,但似乎不可能。我必须为此任务使用特殊字体吗?我不熟悉XNA,但在我必须做同样事情的Silverlight项目中,我最终构建了带有上标字符的科学计数法数字。您不需要特殊字体,只需要带有下面使用的上标字符的Unicode字体。下面是将数字0-9映射到相应字符的代码:privatestaticstringGetSuperscript(intdigit){switch(digit){case0:return"x2070";情况1:返回“x00B9”;情况2:返回“x00B2”;情况3:返回“x00B3”;案例4:返回“x2074”;案例5:返回“x2075”;情况6:返回“x2076”;案例7:返回“x2077”;案例8:返回“x2078”;案例9:返回“x2079”;默认值:返回字符串。空;}}这会将您原来的双精度转换为科学记数法}varexp=(int)Math.Log10(value.Value);varfmt=string.Format("{{0:F{0}}}x10{{1}}",小数);返回string.Format(fmt,value/Math.Pow(10,exp),FormatExponentWithSuperscript(exp));}privatestaticstringFormatExponentWithSuperscript(intexp){varsb=newStringBuilder();boolisNegative=false;if(exp那么现在您应该可以使用FormatAsPowerOfTen(123400,2)生成1.23x10?。我在某些地方调整了@Phil的答案并想与您分享我的版本。publicstaticstringFormatAsPowerOfTen(thisdouble?value,intdecimals){if(!value.HasValue)returnstring.Empty;否则返回FormatAsPowerOfTen(value.Value,decimals);}publicstaticstringFormatAsPowerOfTen(thisdoublevalue,intdecimals){conststringMantissa="{{0:F{0}}}";//使用Floor对负数进行舍入,这样数字在小数点分隔符前会有一位数字,而不是没有。varexp=Convert.ToInt32(Math.Floor(Math.Log10(value)));stringfmt=string.Format(尾数,小数);//不要显示10^0,因为这在科学出版物中不常用。if(exp!=0)fmt=string.Concat(fmt,"×10{1}");//使用unicode乘号,而不是x。返回string.Format(fmt,value/Math.Pow(10,exp),FormatExponentWithSuperscript(exp));}privatestaticstringFormatExponentWithSuperscript(intexp){boolisNegative=false;varsb=newStringBuilder();if(exp另请注意,由字母替换,对于1,2和3与指数中其他数字的组合,此方方法可能会给你难看的结果0和4-9是在unicode中添加的,并且在许多字体中都没有。您应确保使用支持所有数字的字体,例如ArialUnicodeMS、Cambria、Calibri、Consolas或LucidaSansUnicode。以上就是C#学习教程:使用标准化科学记数法绘制字符串(上标)分享全部内容。如果对大家有用,需要了解更多C#学习教程,希望大家多多关注---本文来自网络收藏不代表立场,如涉及侵权,请点击右转联系管理员删除。如需转载请注明出处: