Attached is a sample which should demonstrate the issue:
We have run this with a german locale where the groupingSeparator is '.'
and the decimalSeparator is ','.
When you start the app you will see a panel with an amount number field containing
an initial value of "123.456,45".
Now, when you delete the last three characters with backspace (with "123.456" remaining) and go to the next field, the amount turns into "123,46".
It should be "123.456,00", shoudn't it?

Holger

Code:
public class NumberFieldBug implements EntryPoint {

    private static NumberConstants NUMBER_CONSTANTS;

    private final LayoutContainer contentContainerPanel = new LayoutContainer();
    private Widget content;
    private final Viewport viewport = new Viewport();

    public void onModuleLoad() {
        ThemeManager.register(Slate.SLATE);
        contentContainerPanel.setLayout(new FitLayout());
        viewport.setLayout(new BorderLayout());
        final BorderLayoutData westLayoutData = new BorderLayoutData(LayoutRegion.WEST, 200);
        westLayoutData.setMargins(new Margins(5));
        westLayoutData.setSplit(true);
        westLayoutData.setCollapsible(true);
        final BorderLayoutData centerLayoutData = new BorderLayoutData(LayoutRegion.CENTER);
        centerLayoutData.setMargins(new Margins(5, 5, 5, 0));
        viewport.add(contentContainerPanel, centerLayoutData);
        final BorderLayoutData northLayoutData = new BorderLayoutData(LayoutRegion.NORTH, 33);
        northLayoutData.setMargins(new Margins());
        RootPanel.get().add(viewport);
        NUMBER_CONSTANTS = (NumberConstants) GWT.create(NumberConstants.class);
        final Widget initialContent = createInitialContent();
        setContent(initialContent);
        GWT.log("groupingSeparator=" + NUMBER_CONSTANTS.groupingSeparator(), null);
        GWT.log("decimalSeparator=" + NUMBER_CONSTANTS.decimalSeparator(), null);
    }

    private Widget createInitialContent() {
        BeanModelFactory factory = BeanModelLookup.get().getFactory(MyBean.class);
        final MyBean data = new MyBean();
        data.setAmount(123456.45d);
        data.setComment("Test");
        BeanModel beanModel = factory.createModel(data);
        final FormPanel result = new FormPanel();
        result.setFrame(true);
        result.setHeaderVisible(false);
        result.setBodyBorder(false);
        result.setBorders(false);
        result.setLabelWidth(120);
        result.setLabelAlign(LabelAlign.TOP);
        result.setSize(250, 450);

        final String decimalPattern = "#,##0.00";
        final NumberField amountField = new NumberField();
        amountField.setAllowBlank(false);
        amountField.setAutoValidate(true);
//        amountField.setFormat(NumberFormat.getFormat("#0.##"));
        amountField.setDecimalSeparator(NUMBER_CONSTANTS.decimalSeparator());
        final NumberFormat format = NumberFormat.getFormat(decimalPattern);
        amountField.setFormat(format);
        amountField.setName("amount");
        amountField.setFieldLabel("Amount");
        result.add(amountField);
        final TextField<String> commentField = new TextField<String>();
        commentField.setSelectOnFocus(true);
        commentField.setAutoValidate(true);
        commentField.setName("comment");
        commentField.setFieldLabel("Comment");
        result.add(commentField);
        final FormBinding binding = new FormBinding(result, true);
        binding.bind(beanModel);
        return result;
    }

    private void setContent(Widget newContent) {
        if (content != null) {
            contentContainerPanel.remove(content);
            content = null;
        }
        contentContainerPanel.add(newContent);
        content = newContent;
        contentContainerPanel.layout();
        contentContainerPanel.show();
    }


    public static class MyBean implements BeanModelTag, Serializable {
        private Double amount;
        private String comment;
        public Double getAmount() {
            return amount;
        }
        public void setAmount(Double amount) {
            this.amount = amount;
        }
        public String getComment() {
            return comment;
        }
        public void setComment(String comment) {
            this.comment = comment;
        }
    }
}