当前位置: 首页 > 知识库问答 >
问题:

从小数转换到小数需要帮助吗

纪佐
2023-03-14

我发现了这个美丽的小数到小数的函数:https://gist.github.com/natecook1000/9ecc976aaac9a035bddf

我已经操纵了我的应用程序的必要性,并希望在制作Kotlin版本的帮助上面。我确实尝试过自己进行转换,但我是一名新手,在科特林只呆了3周。我没有足够的经验来匹配不同语言之间的语法和语义,我自己也做不到。感谢您的帮助:)

我将上面的内容更改为输出16英寸的自定义Unicode输出(最初不包括16英寸)。我需要将输出限制为16、8、4和1/2。

如果你不愿意做整个代码转换,那么可能会帮助十进制到分数转换器中的特定功能。另外注意,我已经到处寻找一个直接的静态编程语言版本,但没有找到一个像这个版本那样接受十进制输入和分数输出的版本。

主观意见提醒:我爱Swift:)静态编程语言很难学。

我的快速版本:

func vulgarFraction(number: Double) -> (String, Double) {
let fractions: [(String, Double)] = [("", 1), ("\(fifteenSixteenth)", 15/16), ("\u{215E}", 7/8), ("\(thirteenSixteenth)", 13/16),
                                     ("\u{00BE}", 3/4), ("\(elevelSixteenth)", 11/16), ("\u{215D}", 5/8), ("\(nineSixteenth)", 9/16), ("\u{00BD}", 1/2), ("\(sevenSixteenth)", 7/16),
                                     ("\u{215C}", 3/8), ("\(fiveSixteenth)", 5/16), ("\u{00BC}", 1/4), ("\(threeSixteenth)", 3/16), ("\u{215B}", 1/8), ("\(oneSixteenth)", 1/16), ("", 0)]
let whole = Int(number)
let sign = whole < 0 ? -1 : 1
let fraction = number - Double(whole)

for i in 1..<fractions.count {
    if abs(fraction) > (fractions[i].1 + fractions[i - 1].1) / 2 {
        if fractions[i - 1].1 == 1.0 {
            return ("\(whole + sign)", Double(whole + sign))
        } else {
            return ("\(whole) \(fractions[i - 1].0)", Double(whole) + Double(sign) * 
fractions[i - 1].1)
        }
    }
}
return ("\(whole)", Double(whole))
}


let oneSixteenth: String = "\u{00B9}" + "/" + "\u{2081}" + "\u{2086}"
let threeSixteenth: String = "\u{00B3}" + "/" + "\u{2081}" + "\u{2086}"
let fiveSixteenth: String = "\u{2075}" + "/" + "\u{2081}" + "\u{2086}"
let sevenSixteenth: String = "\u{2077}" + "/" + "\u{2081}" + "\u{2086}"
let nineSixteenth: String = "\u{2079}" + "/" + "\u{2081}" + "\u{2086}"
let elevelSixteenth: String = "\u{00B9}" + "\u{00B9}" + "/" + "\u{2081}" + "\u{2086}"
let thirteenSixteenth: String = "\u{00B9}" + "\u{00B3}" + "/" + "\u{2081}" + "\u{2086}"
let fifteenSixteenth: String = "\u{00B9}" + "\u{2075}" + "/" + "\u{2081}" + "\u{2086}"

print(vulgarFraction(number: 4.4375))

我迄今为止的尝试:

class DecimalFraction {

private val oneSixteenth = "\u00B9" += "/" += "\u2081" += "\u2086"
private val threeSixteenth = "\u00B3" + "/" + "\u2081" + "\u2086"
private val fiveSixteenth = "\u2075" + "/" + "\u2081" + "\u2086"
private val sevenSixteenth = "\u2077" + "/" + "\u2081" + "\u2086"
private val nineSixteenth = "\u2079" + "/" + "\u2081" + "\u2086"
private val elevenSixteenth = "\u00B9" + "\u00B9" + "/" + "\u2081" + "\u2086"
private val thirteenSixteenth = "\u00B9" + "\u00B3" + "/" + "\u2081" + "\u2086"
private val fifteenSixteenth = "\u00B9" + "\u2075" + "/" + "\u2081" + "\u2086"

fun vulgarFraction(number: Double): Pair<String, Double> {

val fractions = arrayOf(
    Pair("", 1),
    Pair("$fifteenSixteenth", 15/16),
    Pair("\u215E", 7/8),
    Pair("$thirteenSixteenth", 13/16),
    Pair("\u00BE", 3/4),
    Pair("$elevenSixteenth", 11/16),
    Pair("\u215D", 5/8),
    Pair("$nineSixteenth", 9/16),
    Pair("\u00BD", 1/2),
    Pair("$sevenSixteenth", 7/16),
    Pair("\u215C", 3/8),
    Pair("$fiveSixteenth", 5/16),
    Pair("\u00BC", 1/4),
    Pair("$threeSixteenth", 3/16),
    Pair("\u215B", 1/8),
    Pair("$oneSixteenth", 1/16),
    Pair("", 0)
)

val whole = number.toInt()
val sign = whole < 0 ? -1 : 1 // KOTLIN DOES NOT LIKE THIS LINE
val fraction = number - whole.toDouble()

for (i in 1..fractions.count()) {
    if abs(fraction) > (fractions[i].1 + fractions[i - 1].1) / 2 {     // KOTLIN DOES NOT LIKE THIS FOR IN LOOP...
        if fractions[i - 1].1 == 1.0 {     // KOTLIN DOES NOT LIKE THIS FOR IN LOOP...
        return ("${whole + sign}", (whole + sign).toDouble)     // KOTLIN DOES NOT LIKE THIS FOR IN LOOP...
    } else {     // KOTLIN DOES NOT LIKE THIS FOR IN LOOP...
        return ("$whole" $fractions[i - 1].0, whole.toDouble + sign.toDouble * fractions[i - 1].1)     // KOTLIN DOES NOT LIKE THIS FOR IN LOOP...
    }
    }
}


return Pair("$whole", whole.toDouble())
}
}

共有1个答案

燕元明
2023-03-14

到目前为止,我的答案是:

class DecimalFraction {

private val oneSixteenth = "\u00B9" + "/" + "\u2081" + "\u2086"
private val threeSixteenth = "\u00B3" + "/" + "\u2081" + "\u2086"
private val fiveSixteenth = "\u2075" + "/" + "\u2081" + "\u2086"
private val sevenSixteenth = "\u2077" + "/" + "\u2081" + "\u2086"
private val nineSixteenth = "\u2079" + "/" + "\u2081" + "\u2086"
private val elevenSixteenth = "\u00B9" + "\u00B9" + "/" + "\u2081" + "\u2086"
private val thirteenSixteenth = "\u00B9" + "\u00B3" + "/" + "\u2081" + "\u2086"
private val fifteenSixteenth = "\u00B9" + "\u2075" + "/" + "\u2081" + "\u2086"

fun vulgarFraction(number: Double): Pair<String, Double> {

    val fractions = arrayOf(
        Pair("", 1),
        Pair(this.fifteenSixteenth, 15/16),
        Pair("\u215E", 7/8),
        Pair(this.thirteenSixteenth, 13/16),
        Pair("\u00BE", 3/4),
        Pair(this.elevenSixteenth, 11/16),
        Pair("\u215D", 5/8),
        Pair(this.nineSixteenth, 9/16),
        Pair("\u00BD", 1/2),
        Pair(this.sevenSixteenth, 7/16),
        Pair("\u215C", 3/8),
        Pair(this.fiveSixteenth, 5/16),
        Pair("\u00BC", 1/4),
        Pair(this.threeSixteenth, 3/16),
        Pair("\u215B", 1/8),
        Pair(this.oneSixteenth, 1/16),
        Pair("", 0)
    )

    val whole = number.toInt()
    val sign = if (whole < 0) -1 else 1
    val fraction = number - whole.toDouble()

    for (i in 1..fractions.count()) {
        if (abs(fraction) > (fractions[i].1 + fractions[i - 1].1) / 2) {
            if (fractions[i - 1].1 == 1.0) {
            return ("${whole + sign}", (whole + sign).toDouble())
        } else {
            return ("$whole" $fractions[i - 1].0, whole.toDouble() + sign.toDouble() * fractions[i - 1].1)
        }
        }
    }


    return Pair("$whole", whole.toDouble())
}

}

我将一些代码缩小到kotlin,我无法理解以下代码中的错误和差异:

for (i in 1..fractions.count()) {
        if (abs(fraction) > (fractions[i].1 + fractions[i - 1].1) / 2) {
            if (fractions[i - 1].1 == 1.0) {
            return ("${whole + sign}", (whole + sign).toDouble())
        } else {
            return ("$whole" $fractions[i - 1].0, whole.toDouble() + sign.toDouble() * fractions[i - 1].1)
        }
        }
    }

Kotlin似乎不喜欢嵌套的if和else块中的return语句

 类似资料:
  • 我对PHP非常非常新(今天早上开始),所以请原谅我的无知和缺乏常识。 我正在开发一个网站,该网站已经具备了获取表单数据并将其存储在MySQL数据库中的功能。我现在想要每次加载某个页面时从数据库中提取所述数据,并使用相同的方法将一些HTML div应用到我的页面中。本质上我有3个卡预定义在源代码,但我希望它添加更多的卡到页面,一旦它加载,只要有行在我的MySQL表。 这是我用来部分实现这一点的代码:

  • 我正在制作一个计算器,希望它能自动将每个小数转换成小数。因此,如果用户计算一个表达式,答案是“0.333333......”,它会返回“1/3”。对于“0.25”,它会返回“1/4”。使用GCD,如这里所示(小数到小数的转换),我已经知道如何将任何有理的、终止的小数转换成小数,但这对任何重复的小数都不起作用(如.333333)。 用于堆栈溢出的所有其他函数都在Objective-C中。但我需要在我

  • 我有以下代码: 但不管我做什么都会出错 2015/05/18 08:45:51[错误]14466#0:*907 FastCGI在stderr中发送:“PHP消息:PHP致命错误:在第44行的/var/http/submit.PHP中对非对象调用成员函数execute()”同时从上游读取响应头,客户端:xx,服务器:,请求:“POST/submit.PHP http/1.1”,上游:fastcgi:

  • 需要帮助编写一个cassandra udf来添加/除/乘两个变量。尝试下面的代码,但它似乎不工作。而且我没有在Java的经验,所以可能是我不能调试。感谢你的帮助。

  • 问题内容: 我有一个要读取数据的CSV文件,我想将其读入Python。我得到包含类似字符串的列表。现在这样做不起作用,因为它的小数点错误。 我如何将其读入Python ? 问题答案: 在大多数情况下会做 如果数量庞大且已使用了数千个,则可以: 将所有逗号替换为要点: 删除除最后一点以外的所有内容:

  • 问题内容: 我正在构建一个计算器,并希望它自动将每个小数 转换为分数。因此,如果用户计算出答案 为“ 0.333333…” 的表达式,它将返回“ 1/3”。对于“ 0.25”,它将返回“ 1/4”。 使用GCD(小数到小数 转换),我已经弄清楚了如何将任何有理数,终止 小数转换为小数,但这不适用于任何重复的小数 (如.333333)。 堆栈溢出的所有其他功能在Objective-C中。但是我需要