我想 << 浮点数到使用 ofstream 的文件中,并在数字为正数时包含一个空格,例如您使用的方式

printf("% .3f",number),

以确保它们对齐。您如何格式化 << 以包含单个符号空间?


COCOA - 如何使文本字段在 NSTextf,c++,padding,ofstream"/>

首页 > 解决方案 > 如何使用 <

我想 << 浮点数到使用 ofstream 的文件中,并在数字为正数时包含一个空格,例如您使用的方式

printf("% .3f",number),

以确保它们对齐。您如何格式化 << 以包含单个符号空间?


COCOA - 如何使文本字段在 NSTextf

问题描述

我想 << 浮点数到使用 ofstream 的文件中,并在数字为正数时包含一个空格,例如您使用的方式

printf("% .3f",number),

以确保它们对齐。您如何格式化 << 以包含单个符号空间?


COCOA - 如何使文本字段在 NSTextfield 中达到最大长度时不允许文本输入?

我是 MAC 开发的新手。如果答案已经在任何地方解释,请在评论中添加链接。在这种情况下,我将删除问题。

目前,如果文本字段长度达到最大计数,我将显示警报。但是,最后输入的字符仍然存在于文本字段中,因此用户需要退格。

我也尝试过使用 NSFormatter,但失败了。

//代码

override func controlTextDidChange(_ obj: Notification) {
  if let textField = obj.object as? NSTextField {
     if textField.stringValue.count > x {
         // display alert
     }
  }
}

我期待的是用户应该输入文本,但不应该显示文本。不应该像我们在 web 中实现的那样允许文本输入而不是警报。

提前致谢。

标签: c++paddingofstream

解决方案


标准库中似乎还没有一个。如果您不介意冗长,只需手动直接执行即可:

if (std::signbit(number) == false) // to avoid traps related to +0 and -0
    std::cout << " ";
std::cout << number;

(别忘了#include <cmath>signbit!)

但这更像是一种“解决方法”。您还可以重新实现num_put方面:(此实现受cppreference 上的示例启发)

// a num_put facet to add a padding space for positive numbers
class sign_padding :public std::num_put<char> {
public:
    // only for float and double
    iter_type do_put(iter_type s, std::ios_base& f,
                     char_type fill, double v) const
    {
        if (std::signbit(v) == false)
            *s++ = ' ';
        return std::num_put<char>::do_put(s, f, fill, v);
    }
};

并像这样使用它:

// add the facet to std::cout
std::cout.imbue(std::locale(std::cout.getloc(), new sign_padding));
// now print what you want to print
std::cout << number;

现场演示。这样,您可以重用代码。


推荐阅读