Works fine for me. I cannot reproduce your problem. Consider the below code.
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
public class SpinTest {
private void createAndDisplayGui() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(createSpinner(), BorderLayout.PAGE_START);
frame.add(createButtons(), BorderLayout.PAGE_END);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
private JPanel createButtons() {
JPanel panel = new JPanel();
JButton button = new JButton("Exit");
button.addActionListener(e -> System.exit(0));
panel.add(button);
return panel;
}
private JPanel createSpinner() {
JPanel panel = new JPanel();
SpinnerNumberModel priceSpinnerModel = new SpinnerNumberModel(0d, 0d, null, 0.01d);
JSpinner priceSpinner = new JSpinner(priceSpinnerModel);
JSpinner.NumberEditor editor = new JSpinner.NumberEditor(priceSpinner, "#,##0.00");
JFormattedTextField textField = editor.getTextField();
textField.setColumns(12);
priceSpinner.setEditor(editor);
panel.add(priceSpinner);
return panel;
}
public static void main(String[] args) {
EventQueue.invokeLater(() -> new SpinTest().createAndDisplayGui());
}
}
If I enter a number with more than two digits after the decimal point, it gets rounded to precisely two digits.
Refer to How to Use Spinners and javadoc for class java.text.DecimalFormat