Когда денежное значение равно нулю, std::put_money не выводит символ '0', как ожидалось. Я не могу найти ничего, объясняющего такое поведение.
пример:
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
cout.imbue(locale(""));
cout << showbase << put_money(0.0);
return 0;
}
Я ожидаю, что на выходе будет 0,00 фунтов стерлингов (в зависимости от локали), но вместо этого я получаю 0,00 фунтов стерлингов.
В конечном счете, добавить особый случай для нулевых значений не так уж и сложно, но мне такое поведение все еще не имеет смысла. В чем причина этого (предполагая, что это преднамеренно) и, кроме отдельной обработки нуля, есть ли какие-либо простые обходные пути?
Обновлять
Это кажется специфичным для компилятора, у меня были отчеты о том, что он работает, как и ожидалось, с clang и VS, поэтому, вероятно, специфичен для gcc/g++ (точнее, версия 4.9, но другие версии, похоже, показывают такое же поведение)
د.ت. .000
и₪ .00
, а¥0
и₩0
. - person Toby Speight   schedule 15.06.2017