将 Float 显示为文本框类型 "number"
Displaying a Float to a Textbox type "number"
有很多关于将文本框字符串转换为浮点值或允许类型="number" 的文本框允许小数点的问题,但是,我似乎找不到任何东西与将浮点值显示到类型设置为 "number".
的文本框相关
到目前为止,我拥有的是一个类型为"number" 且步长为“0.01”的文本框。它还具有最小值“0”。显示如下:
<asp:TextBox ID="TextBox1" runat="server" TextMode="Number" step="0.01" Width="140px" min="0"></asp:TextBox>
它可以很好地用于用户输入,并且可以毫无问题地将数据保存到 varable/database。但是,如果我想向用户显示相同的值,它不会显示任何内容,甚至不显示“0”。
所以我的问题是:如何从 "float" 中获取值,将其转换为 "string",并将其应用于 Textbox.Text,以便它显示值?
例如:如果我将文本框中的值设置为“5”,它会保存并显示“5”,但如果我输入“5.5”或“5,5”,无论哪种方式,它都不会显示它,我需要它显示“5.5”。
有什么想法吗?
PS:它应该代表货币价值。如果可能的话,我也希望有一个不需要 Javascript 的解决方案。
将 any
值设置为 step 属性。
<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转成string
var str = floatNum.ToString("N"); // or N2 (2 digit decimal)
您可以使用以下方式手动签入代码隐藏:
TextBox1.Text.ToString(CultureInfo.InvariantCulture);
您也可以使用
float.TryParse( TextBox1.Text)
查看该值是否为浮点数,或者是否可以将其视为普通字符串。
浮点数 5.5 不完全是真实值 5.5(参见 .Net Float Reference)
我强烈建议您永远不要使用浮点数来表示货币值!最好对这些东西使用小数类型。
就是说,如果您真的想使用浮点数,当您从数据库中读取值时,请执行以下操作:
TextBox1.Text = ((decimal)myNum.ToString( "0.##" )).Tostring()
使用此解决方案,您可以随心所欲地保留步进“0.01”
P.S。正如 Tiago 指出的那样,您的文化和浮点分隔符之间可能存在不匹配。小数期望点,但也许您的数字有逗号。在这种情况下像这样转换:
decimal.Parse("18,285", new NumberFormatInfo() { NumberDecimalSeparator = "," })
got it from this question
好吧,在对文本框类型编号进行一些研究之后,我发现 HTML5 input type="number" 是一团糟。我知道这对某些人来说并不是很有趣,但我知道一两个程序员会遇到同样的问题。
@KarmaEDV 对这个问题有最好的答案,因为小数类型的值是处理货币的正确方法。但是,@AVD 也是正确的,如果您将其设置为 "any",它将接受任何大小的十进制值。
同时,又引发了另一个问题。当您使用类型编号设置输入时,该框将仅接收数字或 DOT(点)值。如果您不使用英文符号,则可以使用“,”(逗号)作为小数点。疯狂的事情发生在这里,盒子接受“,”并且当值被保存时,它仍然是一个有效的十进制值,但是当你转换值(带有“,”)时,它会创建一个带有“ ”。例如:值 5,5 在字面上是字符串“5,5”。
作为不接受","的框,它不会渲染它。解决方案?
.ToString().Replace(',','.');
就这么简单。
想要更多?它仍然显示带有“,”(逗号)的“5,5”...这就是它造成问题的原因...
谢谢大家的帮助。
可能的最佳做法是忘记 Text="Number"(由于上述问题)并使用 Decimal.TryParse() 验证用户输入。对于美国货币,我还建议确保小数点后不超过两位数,并且(更好)确保小数点右侧正好有两位数以捕获可能的输入错误(如果只有一位数小数点右边可能是无意的)。
有很多关于将文本框字符串转换为浮点值或允许类型="number" 的文本框允许小数点的问题,但是,我似乎找不到任何东西与将浮点值显示到类型设置为 "number".
的文本框相关到目前为止,我拥有的是一个类型为"number" 且步长为“0.01”的文本框。它还具有最小值“0”。显示如下:
<asp:TextBox ID="TextBox1" runat="server" TextMode="Number" step="0.01" Width="140px" min="0"></asp:TextBox>
它可以很好地用于用户输入,并且可以毫无问题地将数据保存到 varable/database。但是,如果我想向用户显示相同的值,它不会显示任何内容,甚至不显示“0”。
所以我的问题是:如何从 "float" 中获取值,将其转换为 "string",并将其应用于 Textbox.Text,以便它显示值?
例如:如果我将文本框中的值设置为“5”,它会保存并显示“5”,但如果我输入“5.5”或“5,5”,无论哪种方式,它都不会显示它,我需要它显示“5.5”。
有什么想法吗?
PS:它应该代表货币价值。如果可能的话,我也希望有一个不需要 Javascript 的解决方案。
将 any
值设置为 step 属性。
<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转成string
var str = floatNum.ToString("N"); // or N2 (2 digit decimal)
您可以使用以下方式手动签入代码隐藏:
TextBox1.Text.ToString(CultureInfo.InvariantCulture);
您也可以使用
float.TryParse( TextBox1.Text)
查看该值是否为浮点数,或者是否可以将其视为普通字符串。
浮点数 5.5 不完全是真实值 5.5(参见 .Net Float Reference)
我强烈建议您永远不要使用浮点数来表示货币值!最好对这些东西使用小数类型。
就是说,如果您真的想使用浮点数,当您从数据库中读取值时,请执行以下操作:
TextBox1.Text = ((decimal)myNum.ToString( "0.##" )).Tostring()
使用此解决方案,您可以随心所欲地保留步进“0.01”
P.S。正如 Tiago 指出的那样,您的文化和浮点分隔符之间可能存在不匹配。小数期望点,但也许您的数字有逗号。在这种情况下像这样转换:
decimal.Parse("18,285", new NumberFormatInfo() { NumberDecimalSeparator = "," })
got it from this question
好吧,在对文本框类型编号进行一些研究之后,我发现 HTML5 input type="number" 是一团糟。我知道这对某些人来说并不是很有趣,但我知道一两个程序员会遇到同样的问题。
@KarmaEDV 对这个问题有最好的答案,因为小数类型的值是处理货币的正确方法。但是,@AVD 也是正确的,如果您将其设置为 "any",它将接受任何大小的十进制值。
同时,又引发了另一个问题。当您使用类型编号设置输入时,该框将仅接收数字或 DOT(点)值。如果您不使用英文符号,则可以使用“,”(逗号)作为小数点。疯狂的事情发生在这里,盒子接受“,”并且当值被保存时,它仍然是一个有效的十进制值,但是当你转换值(带有“,”)时,它会创建一个带有“ ”。例如:值 5,5 在字面上是字符串“5,5”。
作为不接受","的框,它不会渲染它。解决方案?
.ToString().Replace(',','.');
就这么简单。
想要更多?它仍然显示带有“,”(逗号)的“5,5”...这就是它造成问题的原因...
谢谢大家的帮助。
可能的最佳做法是忘记 Text="Number"(由于上述问题)并使用 Decimal.TryParse() 验证用户输入。对于美国货币,我还建议确保小数点后不超过两位数,并且(更好)确保小数点右侧正好有两位数以捕获可能的输入错误(如果只有一位数小数点右边可能是无意的)。