将浮点数显示为文本框类型“数字”

时间:2015-06-30 11:27:22

标签: c# asp.net textbox floating-point

关于将文本框字符串转换为浮点值或允许类型=“数字”的文本框允许小数点有很多问题,但是,我似乎无法找到任何与显示将值浮动到文本框,其类型设置为“数字”。

到目前为止,我所拥有的是一个text = type =“number”和step =“0.01”。它的最小值为“0”。它显示如下:

<asp:TextBox ID="TextBox1" runat="server" TextMode="Number" step="0.01" Width="140px" min="0"></asp:TextBox>

它适用于用户输入并将数据保存到varable /数据库而没有任何问题。但是,如果我想将相同的值显示给用户,它不显示任何内容,甚至不显示“0”。

所以我的问题是:如何将值形式转换为“float”,将其转换为“string”,并将其应用于Textbox.Text,以便显示值?

作为示例:如果我将文本框中的值设置为“5”,它将保存并显示“5”,但如果我放“5.5”或“5,5”,无论哪种方式,它都不会显示它,我需要它来显示“5.5”。

有什么想法吗?

PS:它应该代表货币价值。如果可能的话,我也希望有一个不需要Javascript的解决方案。

5 个答案:

答案 0 :(得分:2)

浮点数5.5不是5.5的实际值(见.Net Float Reference

我强烈建议您永远不要使用花车作为货币价值!最好使用十进制类型来表示这些事情。

那就是说,如果你真的想使用浮点数,当你从数据库中读取值时这样做:

TextBox1.Text = ((decimal)myNum.ToString( "0.##" )).Tostring()

使用此解决方案,您可以在“0.01”

时离开步进

P.S。正如蒂亚戈指出的那样,你的文化与浮点分离器之间可能存在不匹配。小数点期望点,但也许你的号码有一个逗号。在这种情况下转换为:

decimal.Parse("18,285", new NumberFormatInfo() { NumberDecimalSeparator = "," })

got it from this question

答案 1 :(得分:1)

any值设置为step属性。

 <input type="number" step="any"/>

您可以使用Convert.ToSingle()float.Parse将字符串转换为float

var value = Convert.ToSingle(TextBox1.Text, CultureInfo.InvariantCulture);
 //Or
 var value1 = float.Parse(TextBox1.Text, CultureInfo.InvariantCulture);

并使用实例方法的ToString("N")将float转换为字符串。

var str = floatNum.ToString("N"); // or N2 (2 digit decimal)

答案 2 :(得分:1)

好吧,经过对Textbox类型编号的一些研究,我发现HTML5输入类型=&#34;数字&#34;是一个烂摊子。我知道这对某些人来说并不是很有趣,但我知道有一两个程序员遇到同样的问题。

@KarmaEDV对此问题有最佳答案,因为十进制类型值是处理货币的正确方法。但是,@ AVD也是对的,如果你把它设置为&#34;任何&#34;它将接受十进制大小的任何大小的值。

同时,它导致了另一个问题。当您使用类型编号设置输入时,该框将仅接收数字或DOT(点)的值。如果您不使用英语符号,则可以使用&#34;,&#34; (逗号)作为小数点。疯狂的事情发生在这里,盒子接受&#34;,&#34;当值保存时,它仍然是一个有效的十进制值,但是当你转换该值时(使用&#34;,&#34;),它将创建一个字符串,其中包含&#34;,&# 34 ;.例如:值5,5在字符串&#34; 5,5&#34;字面上。

由于那些不接受&#34;,&#34;的盒子,它不会呈现它。解决方案?
    。的ToString()更换(&#39;&#39;&#39;&#39); 就这么简单。

想了解更多?它仍然显示&#34; 5,5&#34;用&#34;,&#34; (逗号)......导致麻烦的原因......

谢谢大家的帮助。

答案 3 :(得分:0)

您可以使用以下内容手动检入代码隐藏:

TextBox1.Text.ToString(CultureInfo.InvariantCulture);

您也可以使用

float.TryParse( TextBox1.Text) 

查看该值是否为浮点数,或者您是否可以将其视为普通字符串。

答案 4 :(得分:0)

可能的最佳做法是忘记Text =“Number”(由于上面指定的问题)并使用Decimal.TryParse()验证用户输入。对于美国货币,我还建议确保小数点后不超过两位数,并且(更好)确保小数点右边有两位数字来捕捉可能的输入错误(如果只有1位数到小数点右边可能是无意的)。