【新特性速递】自定义数字输入框的小数分隔符和千分位分隔符

FineUIPro/Mvc/Core的下个版本(v6.3.0),我们会为数字输入框增加DotSeparator和CommaSeparator,对于特殊语种会非常有用。

 

比如在法语环境下,小数分隔符和千分位分隔符和我们正常的认知是不同的。

下面这个数字(以字符串表示):

"1,682.80"

在法语环境下,应该写作:

"1.682,80"

 

为了能适配这种需求,我们在新版本向 NumberBox 控件新增两个属性,来自定义分隔符。

<f:NumberBox Label="小数" ID="NumberBox1" runat="server" Text="-12345.6789" EnableCommas="true"
	Required="true" ShowRedStar="true" DecimalPrecision="2" DotSeparator="," CommaSeparator="." />
<f:NumberBox Label="正整数" ID="NumberBox2" NoDecimal="true" NoNegative="true" Text="987654321"
	EnableCommas="true" ShowTrigger="false" runat="server" CommaSeparator=" " />

 

显示效果:

  

 

一个重要的原则:不管页面上显示的格式如何,对控件赋值或者获取都是标准的数字格式(也即是去除千分位,小数点用点号表示的字符串)!

 

理解这一点非常关键。

 

下面提供一下数字类型和字符串类型(标准格式)相互转换的代码:

////法语
System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("es");
Decimal num1 = Convert.ToDecimal("-62.345,66");
////中文
//System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("zh-CN");
//Decimal num1 = Convert.ToDecimal("-62,345.66");

// 数字类型转换为字符串类型(标准格式):"-62345.66"
var num1str = num1.ToString(NumberFormatInfo.InvariantInfo);

// 字符串(标准格式)转换为数字类型:-62345.66
var num2 = Convert.ToDecimal(num1str, NumberFormatInfo.InvariantInfo);

// true
var checkequal = num1.Equals(num2);

 

 

注:FineUICore v6.3.0 计划在 2020-05-15 发布,官网示例已更新。

https://pro.fineui.com/#/form/numberbox_separator.aspx 

 

posted @ 2020-05-12 09:54  三生石上(FineUI控件)  阅读(877)  评论(0编辑  收藏  举报