【新特性速遞】自定義數字輸入框的小數分隔符和千分位分隔符

三生石上(FineUI控制元件)發表於2020-05-12

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 

 

相關文章