将浮点显示为文本框类型“;数字”;
本文关键字:类型 数字 文本 显示 | 更新日期: 2023-09-27 18:00:26
关于将Textbox字符串转换为浮点值,或者允许类型="number"的Textbox允许小数点,有很多问题,但是,我似乎找不到任何与将浮点值显示为类型设置为"number"时的Textbox相关的内容。
到目前为止,我有一个文本框,类型为"number",步长为"0.01"。它的最小值为"0"。它显示如下:
<asp:TextBox ID="TextBox1" runat="server" TextMode="Number" step="0.01" Width="140px" min="0"></asp:TextBox>
它可以很好地处理用户输入,并将数据保存到可变/数据库中而不会出现任何问题。然而,如果我想向用户显示相同的值,它不会显示任何内容,甚至不会显示"0"。
所以我的问题是:我如何将值从"float"中提取,将其转换为"string",并将其应用于Textbox.Text,以便它显示值?
举个例子:如果我将Textbox中的值设置为"5",它将保存并显示"5"。但如果我输入"5.5"或"5,5",无论哪种方式,它都不会显示它,我需要它显示"5.5"。
有什么想法吗?
附言:它应该代表一种货币价值。如果可能的话,我也希望有一个不需要Javascript的解决方案。
将any
值设置为步骤属性。
<input type="number" step="any"/>
您可以使用Convert.ToSingle()
或float.Parse
将字符串转换为浮动
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)
浮动5.5不是5.5的实际值(请参阅.Net float Reference)
我强烈建议你永远不要使用浮动货币价值!对于这些内容,最好使用十进制类型。
也就是说,如果你真的想使用float,当你从DB中读取值时,可以这样做:
TextBox1.Text = ((decimal)myNum.ToString( "0.##" )).Tostring()
有了这个解决方案,你可以在按下"0.01"时离开台阶
附言:正如蒂亚戈所指出的,你的文化和浮点分隔符可能不匹配。小数需要点,但也许你的数字有逗号。在这种情况下转换为:
decimal.Parse("18,285", new NumberFormatInfo() { NumberDecimalSeparator = "," })
从这个问题中得到
好吧,在对Textbox type-number进行了一些研究之后,我发现HTML5 input-type="number"一团糟。我知道这对一些人来说并不是很有趣,但我知道有一两个程序员会遇到同样的问题。
@KarmaEDV对这个问题有最好的答案,因为十进制值是处理货币的正确方法。然而,@AVD也是对的,如果你将其设置为"any",它将接受任何大小的十进制值。
同时,它也带来了另一个问题。当您使用类型号设置输入时,该框将只接收数字或DOT(点)值。如果你不使用英语符号,你可以用","(逗号)作为小数点。疯狂的事情发生在这里,框接受",",当保存值时,它仍然是一个有效的十进制值,但当您转换值(使用",")时,它将创建一个带有","的字符串。示例:值5,5在字符串"5,5"中。
作为那些不接受","的盒子,它不会渲染它。解决方案
.ToString().Replace(',','.');就这么简单。
想要更多?它仍然显示带有","(逗号)的"5,5"。。。这是造成麻烦的原因。。。
谢谢大家的帮助。
您可以使用以下内容手动签入代码:
TextBox1.Text.ToString(CultureInfo.InvariantCulture);
你也可以使用
float.TryParse( TextBox1.Text)
查看该值是否为浮点值,或者是否可以将其视为普通字符串。
可能的最佳实践是忘记Text="Number"(由于上面指定的问题),并使用Decimal.TryParse()验证用户输入。对于美元,我还建议确保小数点后不超过两位数字,并(更好)确保小数点右侧正好有两位数字以捕捉可能的输入错误(如果小数点右侧只有一位数字可能是意外的)。