我需要计算两个Label的值之间的差异,我使用以下代码正确地完成了这一操作:
Label26.Text = (((CDbl(PREZZO) - CDbl(Label17.Text))
(PREZZO)
是一个字符串。
当差别很小的时候,问题就出现了,比如我的例子0.00008
,所以我得到的结果是8e-5
。
没有科学记数法,我怎样才能得到正规数呢?
编辑:
用"F5"
化它似乎可以工作,但有时我仍然得到科学记数法,如下所示:
第一次
字符串PREZZO
对应于Price €
的值Label17.Text
的值设置为1H AGO €
的值。
编码:
(CDbl(PREZZO) - CDbl(Label16.Text)).tostring("F5")
2条答案
按热度按时间7jmck4yq1#
如果您没有该数据的数值来源,而且实际上需要剖析UI项目的内容,则插入数据时所使用的文化特性会很重要,因为并非所有文化特性都使用逗号做为小数分隔符号:如果当前的UI区域性(Thread.CurrentThread.CurrentCulture和Thread.CurrentThread.CurrentUICulture)与输入格式不匹配(您显示使用逗号而不是圆点(如InvariantCulture)分隔小数部分的输入),则文本将无法正确解析或根本无法解析。
如果您有使用特定文化特性格式的文字输入,则需要剖析该输入,并指定Map的CultureInfo。
数字没有格式:如果您有一个数字源,请使用进行计算,然后使用目标UI区域性来显示数据,以提供这些值本地化表示形式。
如果输入Culture和目前Culture相同,则在剖析字串值时不需要指定CultureInfo,因为会使用
Thread.CurrentThread.CurrentCulture
传回的Culture。假设输入格式基于十进制数字的意大利语格式(假设基于名称
PREZZO
的使用,Google Translate将其检测为意大利语),您可以创建一个CultureInfo,提供该区域性中使用的标准格式。分析字符串值时,将此CultureInfo传递给方法,以便正确分析文本。
此外,由于您处理的是货币,因此不要使用Double或
CDbl
来解析这些值,而应使用Decimal.Parse()。例如:现在,要显示计算出的价格变化和变化百分比,需要使用相同的CultureInfo重新格式化这些值:
N5
指定精确度为5个十进制值的数字。C5
种类使用CultureInfo定义的Currency格式和Symbol,精确度为5个小数值。这会覆写CultureInfo.NumberFormat.CurrencyDecimalDigits,因此它应该用于特定目的,如本例所示。P5
返回一个数字乘以100
的百分比表示,精度为5个小数位。两个计算值将表示为:
如果输入直接来自用户,请使用Decimal.TryParse()而不是
Decimal.Parse()
来验证输入。另请参阅:Standard numeric format strings
jljoyd4f2#
你可以用.ToString(“F”&c)代替“F5”,因为你不知道差分输入中有多少位小数。所以我们可以计算两个输入中的位数,找到最大的位数并将其传递给ToString(“F”& c),这里c是两个输入中的较大位数。它不总是大于这个数。