正如 Colin 所提到的,您肯定希望使用 GWT Number Format 对象而不是 Double 来解析和格式化,因此解析和格式化是特定于区域设置的。
下面是一些我可以找到的用于解析、验证和格式化百分比数字的代码片段。
但是请注意,编辑过程在文本框值之外硬编码了 % 单位,因此在编辑过程中没有 20,45% 和 0.2045 之间的转换,直接输入 20,45 并因此可视化。我隐约记得在编辑过程中为这种转换而苦苦挣扎,但因为那是前一阵子而忘记了细节。因此,如果它是您的问题和要求的关键部分,那么恐怕下面的示例可能价值有限。不管怎样,他们来了!
注释:
TextBox txt = new TextBox();
NumberFormat _formatFloat = NumberFormat.getFormat("#,##0.00");
NumberFormat _formatPercent = NumberFormat.getFormat("##0.00%");
将“20,45”之类的文本条目解析为 20.45(而不是“20,45%”为 0.2045):
txt.setText("20,45"); // French locale format example, % symbol hard-coded outside of text box.
try {
float amount = (float) _formatFloat.parse(txt.getText());
} catch (NumberFormatException e) ...
解析和验证文本条目,如“20,45”:
private class PercentEntryValueChangeHandler implements ValueChangeHandler<String>
{
@Override
public void onValueChange(ValueChangeEvent<String> event)
{
validatePercent((TextBox) event.getSource());
}
};
private void validatePercent(final TextBox percentTextBox)
{
try
{
if (!percentTextBox.getText().isEmpty())
{
final float val = (float) _formatFloat.parse(percentTextBox.getText());
if (isValid(val))
percentTextBox.setText(_formatFloat.format(val));
else
{
percentTextBox.setFocus(true);
percentTextBox.setText("");
Window.alert("Please give me a valid value!");
}
}
}
catch (NumberFormatException e)
{
percentTextBox.setFocus(true);
percentTextBox.setText("");
Window.alert("Error: entry is not a valid number!");
}
}
private boolean isValid(float val) { return 12.5 < val && val < 95.5; }
txt.addValueChangeHandler(new PercentEntryValueChangeHandler());
将 20.45 格式化为“20,45”:
float val = 20.45;
txt.setText(_formatFloat.format(val));
将 0.2045 格式化为“20,45%”(只读过程,文本框不可编辑,% 设置在文本框内):
float val = 0.2045;
txt.setText(_formatPercent.format((double)(val))); // * 100 embedded inside format.
它并不花哨,可能远非完美,但它确实有效!任何有关如何改进此实现的反馈都非常受欢迎和赞赏!无论如何,我希望它有所帮助。