Just a complement to zackse's fine answer.
There are two problems with:
LC_NUMERIC=en_US.UTF-8 watch -n 0.1 w
as a work around for the fact that watch expect numbers formatted in the user's convention while you expect it to be in the English format.
That doesn't work if LC_ALL is set. LC_ALL overrides all other locale settings including LC_NUMERIC. The work around would be to use:
LC_ALL=en_US.UTF-8 watch -n 0.1 w
but then it would make the second point below even worse
the command started by watch (in this case w) inherits that LC_NUMERIC. So instead of outputting its numbers in a format expected by the user, it will output it in the US English format.
Ideally here, we'd want to tell watch to run w every tenth of a second (regardless of the user's locale) without affecting the behaviour of the w command (which should always give an output understandable by the user in his own locale).
With the yash shell, you can do it with:
watch -n "$((0.1))" w
yash is one of the 3 Bourne-like shells that support floating point arithmetics (the other ones being zsh and ksh93). It's the only one that does internationalisation properly though. zsh always uses . as the decimal mark, and ksh93 honours the one from the locale event in its internal syntax.
For yash, . is the decimal mark for its arithmetic syntax, but it honours the locale's one upon input/output.
Another trick you can use here is to avoid inputting the decimal mark altogether by using scientific notation:
watch -n 1e-1 w
Or you can query the decimal mark from the locale:
m=$(locale decimal_point)
watch -n "0${m}1" w