在 Objective-C 中将小数转换为分数?

2024-01-08

我试图将小数点后的所有内容显示为分数。找不到关于 Objective-c 的太多关于如何实现这一点的信息。我在用double对于我的变量格式,不确定这是否重要。这就是我格式化答案的输出的方式:[theTextField setText:[NSString stringWithFormat:@"%f''", (myVariable)]];这可以显示为小数,但我真的更喜欢它作为整数和分数(即)7 1/2 而不是 7.5000。提前谢谢您!

更新:2011年5月13日

好吧,我让它显示 7 1/16,但是数学上的一些东西是错误的。因为即使改变被除的值,它也不会改变 1/16。我这里哪里出错了?如果有人真的能让这个正常工作,请完整地发布它是如何完成的。这应该很简单,但实际上并不简单,而且太耗时。请完整地发布它是如何完成的。谢谢。

更新: 如果这个答案对您不起作用,请查看我的其他帖子,这有效!将小数转换为分数 https://stackoverflow.com/questions/6061886/finding-the-numerator-of-a-floats-fractional-value-given-a-specific-denominator/6062701#6062701


Objective-C 基本上使用纯 C 来进行所有原始数学运算。

话虽这么说,您将在另一个问题的答案中找到所有必要的信息(以及 C 代码):

如何将浮点数转换为人类可读的分数? https://stackoverflow.com/questions/95727/how-to-convert-floats-to-human-readable-fractions

(具体来说这个答案 https://stackoverflow.com/questions/95727/how-to-convert-floats-to-human-readable-fractions/96035#96035具有实际的C code.)

这是所述算法的快速 C 函数包装:

typedef struct {
    long nominator;
    long denominator;
    double error;
} Fraction;

/*
 * Find rational approximation to given real number
 * David Eppstein / UC Irvine / 8 Aug 1993
 *
 * With corrections from Arno Formella, May 2008
 * Function wrapper by Regexident, April 2011
 *
 * usage: fractionFromReal(double realNumber, long maxDenominator)
 *   realNumber: is real number to approx
 *   maxDenominator: is the maximum denominator allowed
 *
 * based on the theory of continued fractions
 * if x = a1 + 1/(a2 + 1/(a3 + 1/(a4 + ...)))
 * then best approximation is found by truncating this series
 * (with some adjustments in the last term).
 *
 * Note the fraction can be recovered as the first column of the matrix
 *  ( a1 1 ) ( a2 1 ) ( a3 1 ) ...
 *  ( 1  0 ) ( 1  0 ) ( 1  0 )
 * Instead of keeping the sequence of continued fraction terms,
 * we just keep the last partial product of these matrices.
 */
Fraction fractionFromReal(double realNumber, long maxDenominator) {
   double atof();
   int atoi();
   void exit();

   long m[2][2];
   double startx;
   long ai;

   startx = realNumber;

   // initialize matrix:
   m[0][0] = m[1][1] = 1;
   m[0][1] = m[1][0] = 0;

   // loop finding terms until denom gets too big:
   while (m[1][0] *  (ai = (long)realNumber) + m[1][1] <= maxDenominator) {
       long t;
       t = m[0][0] * ai + m[0][1];
       m[0][1] = m[0][0];
       m[0][0] = t;
       t = m[1][0] * ai + m[1][1];
       m[1][1] = m[1][0];
       m[1][0] = t;

       if (realNumber == (double)ai) {
           // AF: division by zero
           break;
       }

       realNumber = 1 / (realNumber - (double)ai);

       if (realNumber > (double)0x7FFFFFFF) {
           // AF: representation failure
           break;
       }
   }

   ai = (maxDenominator - m[1][1]) / m[1][0];
   m[0][0] = m[0][0] * ai + m[0][1];
   m[1][0] = m[1][0] * ai + m[1][1];
   return (Fraction) { .nominator = m[0][0], .denominator = m[1][0], .error = startx - ((double)m[0][0] / (double)m[1][0]) };
}

像这样调用它:

double aReal = 123.45;
long maxDenominator = 42;
Fraction aFraction = fractionFromReal(aReal, maxDenominator);
printf("Real %.3f -> fraction => %ld/%ld, error: %.3f\n",
       aReal,
       aFraction.nominator,
       aFraction.denominator,
       aFraction.error);

打印这个:

Real 123.450 -> fraction => 3827/31, error: -0.002

最后但并非最不重要的一点是,让我们看看如何将新制作的分数放入文本字​​段中:

double myVariable = 7.5;
long maxDenominator = 1000; //sample value
Fraction myFraction = fractionFromReal(abs(myVariable - (NSInteger)myVariable), maxDenominator);
[theTextField setText:[NSString stringWithFormat:@"%d %d/%d", (NSInteger)myVariable, myFraction.nominator, myFraction.denominator]];

预期输出:"7 1/2",实际输出:"7 499/999"
有关为什么会发生这种情况的一些信息,请参阅相关问题的答案:如何将浮点数转换为人类可读的分数? https://stackoverflow.com/questions/95727/how-to-convert-floats-to-human-readable-fractions/95790#95790

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Objective-C 中将小数转换为分数? 的相关文章

  • UIButton 图像调整大小/缩放以适合

    我有一个非常严重的问题 我不知道如何解决 我正在对 UIButtons 框架进行动画处理 当我对其进行动画处理时 我希望按钮中的图像缩放到与按钮相同的大小 它无需在我的 iPhone 模拟器上执行任何操作即可运行 但是当我在 iPad 模拟
  • -[MyClassName copyWithZone:] 无法识别的选择器发送到实例

    我的应用程序崩溃了 原因是 MyClassName copyWithZone 无法识别的选择器发送到实例 我有两节课 假设 Class1 和 Class2 Class1 看起来像 Class1 h interface Class1 NSOb
  • 如果以前录制并播放了电影,AVAudioRecorder 将不会录制

    我的 iPhone 应用程序使用 AVAudioRecorder 进行录音 它还使用 UIImagePickerController 来录制电影 使用 MPMoviePlayerController 来播放电影 一切正常 直到我连续完成所有
  • 将粗体应用于 NSAttributedString 的一部分,同时保留字体大小和外观

    我正在为 iOS 开发一个富文本编辑器 使用UITextView连同一个NSAttributedString 它的功能与传统功能类似 即选择一个区域 单击一个按钮 并将该效果应用于该区域 同时保留文本上的任何其他属性 不幸的是NSAttri
  • AudioQueueNewInput 回调延迟

    无论我提供的缓冲区大小如何 提供给 AudioQueueNewInput 的回调都会以大致相同的时间间隔发生 例如 如果您有 0 05 秒的缓冲区并以 44k 录制 则回调将在大约 0 09 秒时首次调用 然后在 0 001 秒 之后立即发
  • iPhone 操作系统测试最佳实践

    不久前 iPhone 的开发还相当简单 只有几个操作系统版本 甚至更少的设备 然而现在 有 2 个主要操作系统版本和 5 种不同的设备需要考虑 作为一家即将发布多个应用程序的公司 测试已成为越来越重要的问题 测试所有组合的最佳方法是什么 我
  • Xcode 产品在发布模式下呈红色

    我想分发我的应用程序 我放置了代码签名和所有内容 我的最后一步是将构建设置为发布 我去编辑方案并将构建配置发布 然后我的产品由于某种原因变成了红色 我无法在 Finder 中打开它 因此无法发送它 如果我将其改回构建模式 它就不是红色的 我
  • 使用静态库在 ios 项目中设置构建配置以在 xcode 4 中创建存档的正确方法是什么?

    我有一个依赖于多个静态库的工作应用程序 我已将其作为依赖项添加到应用程序中 并在构建阶段添加到与静态库位的链接中 一切都在模拟器和我连接的 iPad 上构建并运行良好 我想创建一个用于试飞的 ipa 文件 因此我按照试飞网站上的说明进行操作
  • 使用 iPhone SDK 访问 iPhone 的通话记录

    我正在构建需要 iPhone 通话记录 只读 中的一些数据的应用程序 呼叫日志是一个位于 用户 库 CallHistory call history db 我使用越狱设备来提取日志 但是尝试使用以下命令打开此位置sqlite open3 命
  • iPhone开发-从用户位置定位地址

    是否可以使用CoreLocation框架获取用户当前所在的街道 区域 那么 如果我获取用户的经度和纬度位置 我可以从该位置获取地址 xx 街道 yy 城市 z 州 吗 Thanks 之前已经有人提出过这个问题了 刚刚发现获取纬度 经度对的街
  • 在 iOS Cocoa 静态库项目中使用 Objective-C 代码,在 iOS 应用程序项目中使用 Swift 代码

    我正在寻找一个简单的过程 用于将共享库项目中的 Objective C 代码与应用程序项目中的 Swift 代码相结合 但到目前为止 此序列尚未成功 启动Xcode 6 1 1 创建工作区测试 创建iOS Cocoa Touch静态库项目T
  • 类型名称已知却未知?

    Xcode 突然显示了此错误 未知类型名称 我会解释一下 我的 StoriesViewController h import
  • 在启用 Bitcode 的情况下导出时出错(未找到架构 armv7 的符号)

    我有一个相当老的项目 其最低部署目标设置为 iOS 8 4 由于技术原因位码must被启用 该项目构建并运行良好 然而 当尝试导出存档的版本时 就会出现问题 我使用的是 Xcode 8 2 1 当我使用以下选项创建测试版本 使用企业证书签名
  • App Store Connect 上传错误“您尚未获得云管理分发证书的访问权限”

    使用 Xcode 将 iOS 应用程序上传到 App Store Connect 自动管理签名 并收到此错误 查找和生成签名资产时发生以下错误 与苹果通讯失败 您尚未获得云管理分发证书的访问权限 请联系您团队的帐户持有人或管理员以授予您访问
  • Three20 和 iOS 6 不工作

    我刚刚尝试了我的一个项目 其中包含 Three20 但它似乎无法编译 给我构建错误 似乎是因为一些 UITouch 界面发生了变化 想知道是否有快速修复方法可以做到这一点 看来问题是在这里 UITouch ivars 已从 iOS 6 SD
  • iPhone 应用程序中的 iOS 7 状态栏恢复为 iOS 6 默认样式?

    在 iOS 7 中UIStatusBar它的设计方式是与视图合并 如下所示 GUI designed by Tina Tav ar http dribbble com shots 1183911 Side menu and status b
  • NSTextview:如何获取插入点的字形矩形?自定义文本视图?

    我似乎找不到任何有关如何获取插入点的矩形的文档 我试图在文本插入点 插入点正下方显示一个视图 如自动完成 我正在考虑制作一个自定义文本视图 但如果我可以避免它 那对我的情况来说将是理想的 谢谢 NSRect rectForActiveRan
  • 具有自定义视图的相机

    我的应用程序使用相机 我想在相机预览上添加叠加层 例如 我想在使用相机时使用相框 还想添加一个用于相机操作的自定义栏 请帮助我做同样的事情 您可能正在尝试使用 UIImagePickerController 但我知道这个可以解决你的问题 您
  • iOS HTTP 请求在后台运行

    当应用程序处于后台时 可以向 PHP 服务器发出 HTTP 异步请求吗 该应用程序是基于位置的应用程序 应收集当前位置并每 5 或其他值 分钟将坐标发送到服务器 即使应用程序处于后台 我也可以将 http 帖子发送到服务器吗 我读到了很多关
  • 类型铸造自我

    以下自我转换对 ClassA 有何作用 这种种姓可以让你进入ClassA吗 A h类 interface ClassA NSObject NSUInteger someNumber ClassB classB property nonato

随机推荐

  • webdriver.Dispose()、.Close() 和 .Quit() 之间的区别

    这些有什么区别 Webdriver Close Webdriver Quit Webdriver Dispose 何时使用哪一个 这是一个很好的问题 我见过人们在不应该使用 Close 的情况下使用 Close 我查看了 Selenium
  • 在 VBA 中触发完整计算

    给定一个包含大量公式的工作簿 我意识到当其单元格值是最新的时 F9 ActiveWorkbook Calculate or Sheets 1 calculate不会触发重新计算 但是 如果另一个单元格通过公式引用的单元格值发生变化 F9 A
  • rand() 即使在 srand(time(NULL)) 之后也不会生成随机数

    我正在尝试使用循环调用类函数 for int i 0 i lt Basket getLemonNum i lemonWeights i Fruit generateWeight fruit fruitWeight cout lt lt le
  • Kendo UI Web 和 Kendo UI ASP.NET for MVC 之间的区别

    通过 Visual Studio 创建 MVC 项目时 视图是使用 cshtml 文件创建的 KendoUI Server Wrappers 在视图中有一个模型 而 KendoUI Web 不仅没有任何模型 而且没有 cshtml 文件 仅
  • 使用 raise_application_error 的 PL SQL 触发器会引发错误。

    我有一些代码需要帮助调试 但我觉得如果我能让其中一个运行 我就能得到其余的 哦 我多么希望 create or replace trigger minimumwage before insert or update on Employee
  • BLE 设备可以充当信标吗

    这可能是一个错误的问题 但只需要知道这是否可行 对于我们的一款 BLE 设备 制造商数据是使用使用 peripheral advertisement manufacturerData manufacturerData
  • Json 架构文件不会在 BigQuery Python API 中执行

    我在使用 Bigquery Python API 时遇到问题 这是我执行脚本时的堆栈跟踪 Traceback most recent call last File createTable py line 17 in
  • 当目标(后端)应用程序在同一 EC2 的多个端口上运行时的 AWS ELB

    我有 2 个相同 Web 应用程序的实例在端口 8080 和 8081 上运行 我需要使用 ALB CLB 进行负载平衡 这在旧的 apache Web 服务器中曾经是一件简单的事情 要求是对下面的实例进行负载平衡 实例 1 Web 应用程
  • 在图像上使用文本塑造形状

    所以我想使用 CSS 在图像上放置一个三角形 确切地说是一个包含一些文本的三角形 像这样的事情 https sketch io render sk 11fa7e2aeba09cb08372f831f84d9af2 jpeg https sk
  • 在React JS中实现状态变化时的过渡效果

    我的 React 页面上有一张图像 当状态更新为新图像时我想执行以下过渡效果 原始图像应该放大和淡出 新图像还应该放大和淡入 效果应该类似于穿过墙壁到达新场景 我怎样才能在 React 中做到这一点 正如 pgsandstrom 提到的 反
  • 使
  • 元素拉伸得比包含的
  • 目前 我正在开发一个工作布局 但我对动态下拉菜单有点困惑 我在 li 元素中使用子 ul 该元素将显示导航链接的子项 但上面的 li 因此是主要的 您将鼠标悬停在其上以查看子项 延伸到 ul 的长度 当然是由其中的 li 元素的宽度定义的
  • 如何使用KeyEventDispatcher

    我一直在尝试制作一个 Pong 克隆作为初学者的项目 但我遇到了障碍 我已经设法达到键盘支持的目的 但是键盘重复延迟开始出现 我还没有找到任何可用的方法来使用 KeyEventDispatcher 它甚至不会启动dispatchKeyEve
  • 使用 boto3 列出 100 多个堆栈

    我们需要列出所有处于 CREATE COMPLETE 状态的堆栈 在我们的 AWS 账户中 我们有超过 400 个这样的堆栈 我们为此编写了以下代码 stack session session client cloudformation l
  • 正向回顾与非捕获组:不同的行为

    我使用 python 正则表达式 remodule 在我的代码中并注意到在这些情况下的不同行为 re findall r s a z a xyz b abc non capturing group results in a xyz b ab
  • QT/C++ - 从不同的类访问 MainWindow UI

    我是 C 和 Qt 的初学者 所以这也许是微不足道的 当然感觉应该很简单 但我已经寻找答案几个小时了 但找不到解决方案 我正在制作一个简单的棋盘游戏 其中 MainWindow 的 ui 用 QtDesigner 制作 包含游戏板的画布 Q
  • 如何向列表添加多种数据类型

    我的清单如下 var serie line new name series name data new List
  • 函数构造函数与函数语句

    today 我读过我们有一种通过函数构造函数声明函数的方法 http www tutorialspoint com javascript javascript function constructors htm 但我从未见过使用的实际实现F
  • 敲除无法处理绑定“foreach”

    我是 Knockout 的新手 我正在构建一个实际上是大型计算器的应用程序 到目前为止 我在一个页面上运行了两个淘汰赛实例 一个实例工作得很好 但另一个实例完全损坏并且似乎根本无法注册 下面是我的 Javascript fetchYear
  • 使用 Springfox 在 Swagger UI 文档中添加标头参数

    我想在我的 Rest 服务的自动生成的 swagger ui 文档中添加一个标头参数字段 我使用 Spring 和 Springfox public ResponseEntity
  • 在 Objective-C 中将小数转换为分数?

    我试图将小数点后的所有内容显示为分数 找不到关于 Objective c 的太多关于如何实现这一点的信息 我在用double对于我的变量格式 不确定这是否重要 这就是我格式化答案的输出的方式 theTextField setText NSS